这两个代码有什么区别:
public uint? a;
public uint a;
我想知道如果我们使用有什么区别?在 int 或 double 或其他之后
提前致谢
这两个代码有什么区别:
public uint? a;
public uint a;
我想知道如果我们使用有什么区别?在 int 或 double 或其他之后
提前致谢
uint?
是一个可以为空的类型,例如它可以保存空值。
uint? a;
uint b;
a = null;
b = null; //this will cause error
在 C# 4.0 中,您可以使用空合并运算符进行检查
b = a ?? 0;
它与
if (a.HasValue)
b = a;
else
b = 0;
值类型不能保存空值,因为它们不是对象。和 ?您指定要在值类型周围使用不可见的包装器,并使其为空。
int a = null // won't work
int? b = null // works
int?
是一个快捷方式Nullable<int>
。它允许存储空值。Nullable<T>
是一种泛型类型,允许将空值分配给通常不支持空值的类型。
所以
int? a = null; //valid
int b = null; //invalid
//usage pattern
if (a.HasValue){
c = a.Value;
}
请参阅可为空的 MSDN 文档
要补充的一件事:
public uint? a;
完全一样
public Nullable<uint> a;
这?
只是语法糖。
哦,还有一个想到的:仅仅因为框架为您提供了使用可为空类型的选项,这并不意味着您应该不假思索地使用它们。
当你使用它们时,你的代码中会充斥着对 NullableHasValue
检查的调用,这与 相同x == null
,可能指向可以改进的设计。
我并不是说 Nullables 不好。实际上恰恰相反:如果您认为它们可能非常适合您的用例,那么请务必继续使用它们。
只是不要仅仅因为它们在那里就使用它们。请?请问好看吗?
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,发音为“Nullable of Int32”,可以分配从 -2147483648 到 2147483647 的任何值,也可以分配 null 值。可以为 Nullable 分配值 true 或 false 或 null。在处理数据库和其他包含可能未分配值的元素的数据类型时,将 null 分配给数字和布尔类型的能力特别有用。例如,数据库中的布尔字段可以存储值 true 或 false,或者它可能是未定义的。
http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx
public uint? a;
这是可为空的类型。可空类型可以表示其基础值类型的正确值范围,以及额外的空值。