我知道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?允许这种机制在哪里?
解决方法:
Where is the mechanism which allows this?
在C#编译器本身.可空< T>是一种具有许多额外规则的特殊类型,包括如何处理null(比较和赋值)以及如何处理运算符(请参阅:“提升运算符”).
对于特殊的“装箱”规则,在Nullable< T>的运行时中也有支持.
您无法模拟Nullable< T>在您自己的代码中,因为您无法表达这些特殊规则.