C# “的目的是什么?”&引用;

C# “的目的是什么?”&引用;,c#,mobile,C#,Mobile,我试图理解移动编程,然后我遇到了一个方法的代码,这个方法应该是把一个字符转换成一个数字。代码正在运行,但我的问题是int后面的“?”的用途是什么 static int? Translate(char c) { if ("ABC".Contains(c)) return 2; else if ("DEF".Contains(c)) return 3;

我试图理解移动编程,然后我遇到了一个方法的代码,这个方法应该是把一个字符转换成一个数字。代码正在运行,但我的问题是int后面的“?”的用途是什么

static int? Translate(char c)
        {
            if ("ABC".Contains(c))
                return 2;
            else if ("DEF".Contains(c))
                return 3;
            else if ("GHI".Contains(c))
                return 4;
            else if ("JKL".Contains(c))
                return 5;
            else if ("MNO".Contains(c))
                return 6;
            else if ("PQRS".Contains(c))
                return 7;
            else if ("TUV".Contains(c))
                return 8;
            else if ("WXYZ".Contains(c))
                return 9;

            return null;

        }

可以通过两种方式表示值类型可为null:

  • 可为空的、可为空的等

  • 智力?双份的


  • 问号只是一个简写。

    int?
    只是
    nullable
    的简写。可为空的数据类型可以表示其类型(
    int
    是这种情况)或
    null
    。32位整数表示以下范围内的任何数字:-2147483648到2147483647;但是可为空的整数(
    int?
    )可以是该范围内的任何值,或者
    null
    nullable
    类的语法糖——在您的例子中,
    int?
    实际上是
    可为空的

    本类的目的是允许值类型表示NULL/<代码>值,因为它们通常不能(它们是C++中的“堆叠”对象)。它涉及到装箱,但是只有在需要时才使用它们,这会带来性能成本

    还请注意,将其设置为
    null
    (在您的情况下,通过
    return
    ,或者只是一个普通赋值)实际上并不会将引用设置为
    null
    。这是一个更神奇的编译器,它实际上将它设置为
    newint?()
    ,一个
    HasValue
    属性设置为
    false

    的实例,它表明它可以为null(因此函数在出错时可以返回null)