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