【问题标题】:WHY Nullable<T>,struct, allows 'null'为什么 Nullable<T>,struct, 允许 'null'
【发布时间】:2013-04-04 12:05:41
【问题描述】:

Nullable 是一个结构。而且我知道不能将结构分配为“空”。那么我们如何将 Nullable 的对象赋值为 null 呢?是什么原因?

【问题讨论】:

  • @Nolonar:为什么会这样?我的意思是如何将结构对象分配为空?将结构对象分配为 null 是不可能的。 Nullable 本身就是一个结构体。
  • 必须玩的规则不一定是编译器和CLR可以玩的规则。
  • @Sadiq 你也可以读到这个stackoverflow.com/a/13980357/570150
  • 不,更多,根据 p.s.w.g 的回答,当null 明显分配给这样一个变量时,就会发生魔法 - 你无法用 C# 为自己编写的魔法类。

标签: c#


【解决方案1】:

它实际上不接受null 的值;它只是具有语法糖,使其能够像null 一样执行。该类型实际上看起来有点像这样:

struct Nullable<T>
{
    private bool hasValue;
    private T value;
}

所以当它初始化hasValue == falsevalue == default(T)时。

当你写代码时

int? i = null;

C# 编译器实际上在幕后执行此操作:

Nullable<T> i = new Nullable<T>();

在运行时将null 转换为int? 时也会进行类似的检查。

进一步阅读

【讨论】:

  • 我想他想知道为什么 id DateTime? test = null 可能。
  • @MarcinJuraszek:是的..这就是我的意思。或者可能是因为 Nullable 重载了运算符。像 == 运算符??不确定。
  • @Sadiq 它确实覆盖了Equals 方法。但int? test = null 实际上更像是一个编译器技巧。我在答案中包含了指向更详细信息的链接。
猜你喜欢
  • 2010-10-15
  • 2011-02-24
  • 1970-01-01
  • 2017-03-19
  • 2017-06-04
  • 2017-04-01
  • 2010-11-01
相关资源
最近更新 更多