C# Net如何允许将Nullables设置为Null
C# Net如何允许将Nullables设置为Null,c#,.net,null,clr,nullable,C#,.net,Null,Clr,Nullable,Nullable类型定义为struct。在.Net中,不能将null赋值给struct,因为struct是不能用null表示的值类型(可为null的除外) Nullable是如何成为“您不能将null分配给值类型”规则的例外的?Nullable的反编译代码没有提供关于这是如何发生的细节 Nullable如何成为“您不能将null赋值给值类型”规则的例外 基本上是通过改变语言。nullliteral从“空引用”变为“相关类型的空值” 在执行时,可空值类型的“空值”是HasValue属性返回fals
Nullable
类型定义为struct
。在.Net中,不能将null
赋值给struct
,因为struct
是不能用null
表示的值类型(可为null的除外)
Nullable
是如何成为“您不能将null
分配给值类型”规则的例外的?Nullable
的反编译代码没有提供关于这是如何发生的细节
Nullable
如何成为“您不能将null赋值给值类型”规则的例外
基本上是通过改变语言。null
literal从“空引用”变为“相关类型的空值”
在执行时,可空值类型的“空值”是HasValue
属性返回false
的值。因此:
int? x = null;
相当于:
int? x = new int?();
将Nullable
的框架部分与语言和CLR方面分开是值得的。事实上,CLR本身不需要对可空值类型了解太多-据我所知,唯一重要的方面是可空值类型的null值被装箱到null引用,并且可以将null引用取消装箱到任何可空值类型的null值。即使是在.NET2.0最终发布之前才引入的
语言支持主要包括:
- 语法糖以
?
的形式出现,因此int?
相当于Nullable
null
- 空合并运算符(
??
)-不限于可空值类型
可能与@Dan重复:如果您想了解更多详细信息,我将用一整章的篇幅介绍C#Depth:)@JonSkeet中的可空值类型,那么如何使int I=null代码>相当于int i=new int()代码>?我想当我们设置inti=null时,运行时只会将HasValue
属性设置为false代码>我说得对吗@Jon@Dan:它需要一个新的C#编译器,基本上:)@SriramSakthivel:它不需要将它设置为false;这是该类型的默认值,对于数组等非常重要。基本上,该类型中有一个bool
字段。
int? x = new int?();