在C#中,可以为空的基本类型(即bool?
)只是它们对应的Nullable<T>
类型的别名,还是两者之间存在差异?
答案 0 :(得分:67)
如果您使用Ildasm查看IL,您会发现它们都编译为Nullable<bool>
。
答案 1 :(得分:38)
bool? b = null
和Nullable<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<>
包装任何值类型,它将赋予它该能力。此外,通过其他属性HasValue
和Value
访问值的方法。
但问题是: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是值类型。这两种形式是可互换的。”