声明之间的区别

时间:2012-06-26 11:23:14

标签: c# .net declaration nullable

这两个代码之间有什么区别:

public uint? a;
public uint a;

我想知道如果我们使用有什么区别?在int或double之后

提前致谢

6 个答案:

答案 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;
}

请参阅Nullable MSDN documentation

答案 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;这是可以为空的类型。可空类型可以表示其基础值类型的正确值范围,以及额外的空值。