关于c#:类型之间有区别吗?和Nullable <type>?

关于c#:类型之间有区别吗?和Nullable <type>?

Is there any difference between type? and Nullable<type>?

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


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


bool? b = nullNullable<bool> b = null之间没有区别。 ?只是C#编译器语法糖。


要访问布尔值?您需要执行以下操作:

1
2
3
4
5
6
7
bool? myValue = true;
bool hasValue = false;

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

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

1
2
3
4
if (myValue)
{
  hasValue = true;
}

令我惊讶的是,到目前为止还没有人找到源代码(C#规范)。从?§4.1.10开始可空类型:

A nullable type is written T?, where T is the underlying type. This syntax is shorthand for System.Nullable< T >, and the two forms can be used interchangeably.

因此,不,两种形式之间没有任何区别。 (假定您在使用的任何命名空间中都没有其他称为Nullable<T>的类型。)


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

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


A bool是值类型,因此它不能包含NULL值。如果用Nullable<>包装任何值类型,它将具有这种能力。此外,通过附加属性HasValueValue

更改对值的访问方法。

但要问的是:Nullable<bool>bool?是别名。


不,没有区别。总结:

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

bool-> System.Boolean

的别名

可空<布尔>->有效值:true,false,null

布尔? -> Nullable

的别名

希望这会有所帮助。


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


没有区别。在这里看看:http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

"语法T?是Nullable的简写,其中T是值类型。这两种形式是可以互换的。"


推荐阅读

    查看linux类型命令?

    查看linux类型命令?,系统,信息,命令,状态,数据,数字,情况,地址,类型,文件,lin

    linux删除类型命令?

    linux删除类型命令?,系统,档案,命令,文件,名称,环境,数据,不了,目录,文件夹,

    linux发现新网卡命令?

    linux发现新网卡命令?,系统,信息,网络,电脑,工具,服务,状态,命令,网卡,名称,

    linux组合命令别名?

    linux组合命令别名?,系统,别名,地方,环境,工作,新增,命令,终端,文件,环境变

    linux命令发现不了?

    linux命令发现不了?,软件,系统,发行,工具,名称,不了,命令,地方,代理,信息,lin

    查看linux库类型命令?

    查看linux库类型命令?,系统,工作,信息,状态,电脑,命令,工具,代码,地址,发行,

    linux解压命令的区别?

    linux解压命令的区别?,系统,工具,电脑,命令,文件,资料,平台,档案,名称,文件

    linux网卡类型命令?

    linux网卡类型命令?,网络,系统,地址,信息,设备,状态,服务,名称,名字,网卡,如

    linux给命令起别名?

    linux给命令起别名?,系统,别名,环境,命令,新增,地方,代码,档案,文件,用户,lin

    linux命令和程序区别?

    linux命令和程序区别?,系统,标准,环境,情况,控制权,服务,软件,信息,命令,文

    linux命令中和区别?

    linux命令中和区别?,系统,认证,电脑,网址,标准,工作,工具,位置,命令,文件,了

    linux中和命令的区别?

    linux中和命令的区别?,系统,网络,软件,标准,命令,控制权,基础,平台,代码,投

    linux不使用别名命令?

    linux不使用别名命令?,系统,地址,别名,工作,信息,命令,目录,终端,控制台,定

    linux查看命令类型用?

    linux查看命令类型用?,信息,系统,情况,命令,实时,工作,设备,电脑,文件,类型,

    linux关机命令区别?

    linux关机命令区别?,系统,工作,命令,信息,用户,进程,方式,方法,终端,区别,lin

    linux命令三种类型?

    linux命令三种类型?,工作,地址,系统,标准,时间,管理,命令,目录,信息,文件,lin

    linux里面命令别名?

    linux里面命令别名?,系统,别名,命令,地方,新增,环境,文件,终端,内容,环境变

    linux对命令取别名?

    linux对命令取别名?,系统,环境,别名,命令,服务,位置,新增,地方,文件,表示,Lin

    linux命令别名设置?

    linux命令别名设置?,系统,名称,名字,别名,命令,工作,项目,管理,环境,地方,修

    linux压缩命令的区别?

    linux压缩命令的区别?,系统,命令,文件,名称,定期,一致,设备,目录,文件夹,后