types有什么区别吗? 和Nullable <type>?
在C#中,可以为空的原始types(即bool?
)只是它们相应的Nullable<T>
types的别名还是两者之间的区别?
如果你用Ildasm来看IL,你会发现它们都编译为Nullable<bool>
。
bool? b = null
之间没有区别bool? b = null
bool? b = null
和Nullable<bool> b = null
。 这个?
只是C#编译器语法糖。
要访问bool的值? 您需要执行以下操作:
bool? myValue = true; bool hasValue = false; if (myValue.HasValue && myValue.Value) { hasValue = true; }
请注意,您不能只做:
if (myValue) { hasValue = true; }
我很惊讶没有人去源(C#规范)呢。 从§4.1.10可空types:
可空types写成T ?,其中T是基础types。 这个语法是System.Nullable <T>的缩写,两种forms可以互换使用。
所以,不,这两种forms没有什么区别。 (假设在你使用的任何名字空间中你都没有任何其他的称为Nullable<T>
types)
Nullable<T>
是由T和一个表示T是否有效的位标志组成的结构。 Nullable<bool>
有三个可能的值:true,false和null。
编辑:啊,我错过了“布尔”之后的问号实际上是types名称的一部分,而不是一个指标,你问一个问题:)。 那么你的问题的答案是“是的,C# bool?
只是Nullable<bool>
的别名”。
bool
是一个值types,因此它不能包含NULL值。 如果你用Nullable<>
包装任何值types,它会给它这个能力。 而且,通过附加属性HasValue
和Value
来访问值的访问方法。
但是,对于这个问题: Nullable<bool>
和bool?
是别名。
不,没有区别。 综上所述:
System.Boolean – >有效值:true,false
bool – > System.Boolean的别名
可空<bool> – >有效值:true,false,null
布尔? – > Nullable <bool>的别名
希望这可以帮助。
空基元只是包装在Nullable中的常规基元。 任何相反的表象只是编译器和语法糖。
没有不同。 看看这里: http : //msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
“语法T?是Nullable的缩写,其中T是一个值types,两种forms是可以互换的。