这两个代码之间有什么区别:
public uint? a;
public uint a;
我想知道如果我们使用有什么区别?在int或double之后
提前致谢
答案 0 :(得分:10)
uint?
是nullable type,例如,它可以保存空值。
uint? a;
uint b;
a = null;
b = null; //this will cause error
在C#4.0中,您可以使用null coalescing operator
进行检查 b = a ?? 0;
与
相同 if (a.HasValue)
b = a;
else
b = 0;
答案 1 :(得分:5)
值类型不能保存空值,因为它们不是对象。用?您指定要在值类型周围使用不可见的包装器,并将其设置为null。
int a = null // won't work
int? b = null // works
答案 2 :(得分:4)
int?
是Nullable<int>
的快捷方式。它允许存储空值。 Nullable<T>
是一种泛型类型,允许将null值赋给通常不支持空值的类型。
所以
int? a = null; //valid
int b = null; //invalid
//usage pattern
if (a.HasValue){
c = a.Value;
}
答案 3 :(得分:3)
public uint? a is `nullable type` which is what the `?` operator means in this scenario.
public uint a; is an unsigned integer that requires a value.
Nullable类型是System.Nullable结构的实例。可空类型可以表示其基础值类型的正常值范围,以及额外的空值。例如,可以为发音为“Nullable of Int32”的Nullable分配从-2147483648到2147483647的任何值,或者可以为其指定空值。可以为Nullable赋值true或false,或者为null。在处理包含可能未赋值的元素的数据库和其他数据类型时,将null分配给numeric和Boolean类型的能力特别有用。例如,数据库中的布尔字段可以存储值true或false,或者可能未定义。
http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx
答案 4 :(得分:3)
要补充一点:
public uint? a;
与
完全相同public Nullable<uint> a;
?
只是语法糖。
哦,还有另一个想到的问题:只是因为框架让你可以选择使用nullable types,这并不意味着你应该不假思索地使用它们。
当您使用它们时,您的代码将会被调用Nullable的HasValue
检查,这些检查与x == null
相同,可能指向可以改进的设计。
我不是说Nullables不好。恰恰相反,实际上:如果您认为它们可能完全适合您的用例,那么请务必继续使用它们。
只是不要因为它们在那里而使用它们。请?好吗?
答案 5 :(得分:2)
public uint? a;
这是可以为空的类型。可空类型可以表示其基础值类型的正确值范围,以及额外的空值。