为什么我可以将 null 分配给“struct Nullable<T>”类型的值而不是我的结构?

我知道可空值类型的机制。但是,我对以下内容感兴趣:


Nullable 值类型正在使用结构(来自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?允许这样做的机制在哪里?


泛舟湖上清波郎朗
浏览 132回答 1
1回答

Smart猫小萌

允许这样做的机制在哪里?在 C# 编译器本身中。Nullable<T>是一种具有许多额外规则的特殊类型,包括如何null处理(比较和赋值)以及如何处理运算符(请参阅:“提升运算符”)。还有就是还支持在运行时进行Nullable<T>,特别“拳击”的规则。您无法Nullable<T>在自己的代码中进行模拟,因为这些特殊规则是您无法表达的。
打开App,查看更多内容
随时随地看视频慕课网APP