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

Moj*_*ter 51 .net c# nullable

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

Ste*_*gan 67

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

  • 也许他们不知道IL或ILDasm是什么意思.链接他们? (4认同)

sam*_*son 38

bool? b = null和之间没有区别Nullable<bool> b = null.这?只是C#编译器语法糖.


Mar*_*ram 18

要访问bool的值?你需要做以下事情:

bool? myValue = true;
bool hasValue = false;

if (myValue.HasValue && myValue.Value)
{
  hasValue = true;
}
Run Code Online (Sandbox Code Playgroud)

请注意,你不能只做:

if (myValue)
{
  hasValue = true;
}
Run Code Online (Sandbox Code Playgroud)

  • 嗯,不知道是否向上投票,因为它没有回答这个问题,但它仍然有用且简洁!;-) (2认同)
  • 如果喜欢改为'if(myValue == true)'.它的工作方式相同,因为如果myValue为null,它将为false. (2认同)

svi*_*ick 9

我很惊讶没有人去过源(C#规范).从§4.1.10可为空类型:

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

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


Cur*_*her 6

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

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