c#-类型之间有区别吗? 和Nullable <type>?

在C#中,可为空的原始类型(即bool?)仅仅是其对应的Nullable<T>类型的别名,还是两者之间有区别?

MojoFilter asked 2020-01-23T11:53:32Z
9个解决方案
67 votes

如果使用Ildasm查看IL,您会发现它们都编译为Nullable<bool>

Steve Morgan answered 2020-01-23T11:53:46Z
38 votes

bool? b = nullNullable<bool> b = null之间没有区别。?只是C#编译器语法糖。

samjudson answered 2020-01-23T11:54:06Z
18 votes

要获得这本书的价值? 您需要执行以下操作:

bool? myValue = true;
bool hasValue = false;

if (myValue.HasValue && myValue.Value)
{
  hasValue = true;
}

请注意,您不能只是这样做:

if (myValue)
{
  hasValue = true;
}
Mark Ingram answered 2020-01-23T11:54:30Z
9 votes

我感到惊讶的是,还没有人去看源代码(C#规范)。 从§4.1.10可为空的类型:

可为空的类型写为T ?,其中T是基础类型。 此语法是System.Nullable <T>的简写,并且两种形式可以互换使用。

因此,不,两种形式之间没有任何区别。 (假设您在使用的任何命名空间中都没有其他称为Nullable<T>的类型。)

svick answered 2020-01-23T11:54:59Z
6 votes

bool?是由T和指示T是否有效的位标志组成的结构。 Nullable<bool>具有三个可能的值:true,false和null。

编辑:啊,我错过了一个事实,即“布尔”之后的问号实际上是类型名称的一部分,而不是您在问问题的指示符:)。 那么,对您的问题的答案是“是的,C#bool?只是Nullable<bool>的别名”。

Curt Hagenlocher answered 2020-01-23T11:55:24Z
4 votes

Nullable<bool>632是值类型,因此它不能包含NULL值。 如果将任何值类型包装为bool?,它将赋予该功能。 此外,通过附加属性HasValueValue可以更改对值的访问方法。

但是要问的是:Nullable<bool>bool?是别名。

spoulson answered 2020-01-23T11:55:48Z
2 votes

不,没有区别。 综上所述:

System.Boolean->有效值:true,false

bool-> System.Boolean的别名

Nullable <bool>->有效值:true,false,null

布尔? -> Nullable <bool>的别名

希望这可以帮助。

morechilli answered 2020-01-23T11:56:30Z
1 votes

空基元只是包装在Nullable中的常规基元。 相反的任何外观都只是编译器和语法糖。

Will answered 2020-01-23T11:56:50Z
0 votes

没有不同。 在这里看看:[http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx]

“语法T?是Nullable的简写,其中T是一个值类型。这两种形式是可以互换的。”

AMC answered 2020-01-23T11:57:14Z
translate from https://stackoverflow.com:/questions/56518/is-there-any-difference-between-type-and-nullabletype