types有什么区别吗? 和Nullable <type>?

在C#中,可以为空的原始types(即bool? )只是它们相应的Nullable<T>types的别名还是两者之间的区别?

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

bool? b = null之间没有区别bool? b = null bool? b = nullNullable<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,它会给它这个能力。 而且,通过附加属性HasValueValue来访问值的访问方法。

但是,对于这个问题: 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是可以互换的。