Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# Net如何允许将Nullables设置为Null_C#_.net_Null_Clr_Nullable - Fatal编程技术网

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?();