类型之间有什么区别吗?和可空的?

时间:2020-03-05 18:51:26  来源:igfitidea点击:

在Care中,可为空的原始类型(即bool?)只是其对应的Nullable <T>类型的别名,还是两者之间有区别?

解决方案

回答

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

编辑:啊,我错过了一个事实,即"布尔"之后的问号实际上是类型名称的一部分,而不是我们在问问题的指示符:)。那么,对问题的答案是"是的,C`bool只是" Nullable <bool>"的别名"。

回答

Null基元只是包装在Nullable中的常规基元。相反的任何外观都只是编译器和语法糖。

回答

"布尔"是一种值类型,因此它不能包含NULL值。如果用" Nullable <>"包装任何值类型,它将赋予该功能。此外,通过其他属性" HasValue"和" Value"来更改对值的访问方法。

但要问的是:Nullable &lt;bool>bool?是别名。

回答

布尔之间没有区别吗? b = nullNullable <bool> b = null`。 "?"只是Ccompiler语法糖。

回答

要获取布尔值?我们需要执行以下操作:

bool? myValue = true;
bool hasValue = false;

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

请注意,我们不能只是这样做:

if (myValue)
{
  hasValue = true;
}

回答

如果使用Ildasm查看IL,则会发现它们都编译为Nullable &lt;bool>

回答

不,没有区别。总之:

System.Boolean->有效值:true,false

bool-> System.Boolean的别名

Nullable <bool>->有效值:true,false,null

笨蛋? -> Nullable <bool>的别名

希望这可以帮助。