3

这两个代码有什么区别:

public uint? a;
public uint a;

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

提前致谢

4

6 回答 6

10

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;
于 2012-06-26T11:23:48.520 回答
5

值类型不能保存空值,因为它们不是对象。和 ?您指定要在值类型周围使用不可见的包装器,并使其为空。

int a = null  // won't work
int? b = null // works
于 2012-06-26T11:26:17.607 回答
4

int?是一个快捷方式Nullable<int>。它允许存储空值。Nullable<T>是一种泛型类型,允许将空值分配给通常不支持空值的类型。

所以

int? a = null; //valid
int b = null; //invalid

//usage pattern
if (a.HasValue){
    c = a.Value;
}

请参阅可为空的 MSDN 文档

于 2012-06-26T11:27:40.400 回答
3

要补充的一件事:

public uint? a;

完全一样

public Nullable<uint> a;

?只是语法糖。

哦,还有一个想到的:仅仅因为框架为您提供了使用可为空类型的选项,这并不意味着您应该不假思索地使用它们。

当你使用它们时,你的代码中会充斥着对 NullableHasValue检查的调用,这与 相同x == null,可能指向可以改进的设计。

我并不是说 Nullables 不好。实际上恰恰相反:如果您认为它们可能非常适合您的用例,那么请务必继续使用它们。

只是不要仅仅因为它们在那里就使用它们。请?请问好看吗?

于 2012-06-26T11:35:02.927 回答
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,发音为“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

于 2012-06-26T11:25:44.033 回答
2

public uint? a;这是可为空的类型。可空类型可以表示其基础值类型的正确值范围,以及额外的空值。

于 2012-06-26T11:25:28.630 回答