Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这两种类型有什么区别吗?和可为空<;类型>;?_C#_.net_Nullable - Fatal编程技术网

C# 这两种类型有什么区别吗?和可为空<;类型>;?

C# 这两种类型有什么区别吗?和可为空<;类型>;?,c#,.net,nullable,C#,.net,Nullable,在C#中,可为空的原语类型(即bool?)只是它们对应的nullable类型的别名,还是两者之间存在差异?anullable是一种由T和位标志组成的结构,指示T是否有效。Nullable有三个可能的值:true、false和null 编辑:啊,我忽略了一个事实,即“bool”后面的问号实际上是类型名称的一部分,而不是你在问问题的指示器:)。那么,您的问题的答案是“是的,C#bool?只是Nullable的别名。”Null原语只是包裹在Nullable中的常规原语。任何与此相反的外观都只是编译器和

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

a
nullable
是一种由T和位标志组成的结构,指示T是否有效。
Nullable
有三个可能的值:true、false和null


编辑:啊,我忽略了一个事实,即“bool”后面的问号实际上是类型名称的一部分,而不是你在问问题的指示器:)。那么,您的问题的答案是“是的,C#
bool?
只是
Nullable
的别名。”

Null原语只是包裹在Nullable中的常规原语。任何与此相反的外观都只是编译器和语法糖。

A
bool
是一种值类型,因此它不能包含空值。如果您将任何值类型包装为
Nullable
,它将赋予该功能。此外,通过附加属性
HasValue
value
来更改对值的访问方法


但问题是:
Nullable
bool?
是别名。

bool和
bool之间没有区别?b=null
可为null的b=null
只是C#编译器语法糖。

要访问bool的值吗?您需要执行以下操作:

bool? myValue = true;
bool hasValue = false;

if (myValue.HasValue && myValue.Value)
{
  hasValue = true;
}
注意,你不能只做:

if (myValue)
{
  hasValue = true;
}

如果您查看使用的IL,您会发现它们都编译为可为空的
。总之:

System.Boolean->有效值:真、假

bool->System.Boolean的别名

可空->有效值:真、假、空

布尔?->可为空的别名


希望这能有所帮助。

我很惊讶还没有人找到源代码(C#spec)。根据§4.1.10可为空的类型:

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


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

没有区别。请看这里:


“语法T?是Nullable的缩写,其中T是一种值类型。这两种形式是可互换的。”

这并没有回答这个问题。是的,我在看到你的答案后意识到了这一点。谢谢嗯,不确定是否要投票,因为它没有回答问题,但它很有用,而且很简洁!;-)好吧,根据乔尔的说法,如果你觉得它有用的话,你应该投上一票——如果它是答案的话,不一定要投。但我要说;)+1,但我会使用不同的名称,以便于阅读!If更愿意改为“If(myValue==true)”。它的工作原理是相同的,因为如果myValue为null,它将为false。应该编辑此问题以澄清基本类型的名称是“bool?”而不是“bool”。下面有很好的答案,但问题不清楚。我有一个关于
int?
Nullable
的类似问题,发现了这个问题(及其答案)非常有帮助。请参考,尽管这是很久以前的评论,但他们可能觉得这个答案与其他答案重复,所以他们会这么做?显然我不是西方最快的枪。所有最重要的答案都在几分钟之内。也许他们不知道IL或ILDasm是什么意思。把它们联系起来?虽然这是真的,但当这两种语言之间存在差异时,这种语言也有一些特殊情况。有关更多详细信息,请参阅(以及此处的链接问题)。