类型之间有什么区别吗?和Nullable <type>?</type>

时间:2008-09-11 13:25:21

标签: c# .net nullable

在C#中,可以为空的基本类型(即bool?)只是它们对应的Nullable<T>类型的别名,还是两者之间存在差异?

9 个答案:

答案 0 :(得分:67)

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

答案 1 :(得分:38)

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

答案 2 :(得分:18)

要获取图书的价值吗?你需要做以下事情:

bool? myValue = true;
bool hasValue = false;

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

请注意,您不能这样做:

if (myValue)
{
  hasValue = true;
}

答案 3 :(得分:9)

我很惊讶没有人去了源(C#规范)。从§4.1.10可以为Nullable的类型:

  

可空类型写为T ?,其中T是基础类型。此语法是System.Nullable&lt; T&gt;的简写,这两种形式可以互换使用。

所以,不,这两种形式没有任何区别。 (假设您在任何名称空间中没有任何其他类型的Nullable<T>。)

答案 4 :(得分:6)

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

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

答案 5 :(得分:4)

bool是值类型,因此它不能包含NULL值。如果用Nullable<>包装任何值类型,它将赋予它该能力。此外,通过其他属性HasValueValue访问值的方法。

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

答案 6 :(得分:2)

没有区别。总结:

System.Boolean - &gt;有效值:true,false

bool - &gt; System.Boolean的别名

可空&LT; BOOL&GT; - &GT;有效值:true,false,null

BOOL? - &GT; Nullable&lt; bool&gt;

的别名

希望这有帮助。

答案 7 :(得分:1)

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

答案 8 :(得分:0)

没有区别。看看这里:http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

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