为什么我可以将null赋给Type“struct Nullable <t>”的值,但不能分配给我的struct?

时间:2018-05-10 11:10:39

标签: c# struct nullable

我知道Nullable Value Types的机制。 但是,我对以下内容感兴趣:

Nullable Value Types正在使用struct(来自https://referencesource.microsoft.com/#mscorlib/system/nullable.cs,ffebe438fd9cbf0e

public struct Nullable<T> where T : struct {
    public Nullable(T value) {
        /* ... */
    }

    public bool HasValue {get;}

    public T Value {get;}
}

我可以像

一样使用它
Nullable<int> i = null;

现在,我以同样的方式创建自己的Nullable-Struct:

public struct MyNullable<T> where T : struct {
    public MyNullable(T value) {
        /* ... */
    }

    public bool HasValue {get;}

    public T Value {get;}
}

为什么我不能

MyNullable<int> i = null;

现在?

我知道,struct的值不能为null - 但是为什么struct Nullable的值可以为null?允许这种情况的机制在哪里?

1 个答案:

答案 0 :(得分:7)

  

允许这种机制在哪里?

在C#编译器本身。 Nullable<T>是一种特殊类型,包含许多额外规则,包括如何处理null(比较和赋值)以及如何处理运算符(请参阅:&#34;提升运算符&#34;)。 / p>

运行时支持Nullable<T>,特殊&#34;拳击&#34;规则。

您无法在自己的代码中模仿Nullable<T>,因为您无法表达这些特殊规则。