为什么我可以将 null 分配给类型 "struct Nullable<T>" 的值,但不能分配给我的结构?



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

可为空的值类型正在使用结构(从 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;

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

public struct MyNullable<T> where T : struct {
public MyNullable(T value) {
/* ... */
}
public bool HasValue {get;}
public T Value {get;}
}

为什么我不能做

MyNullable<int> i = null;

现在?

我知道,结构体的值不能为空 - 但是为什么结构体 Nullable 的值可以为空?允许这样做的机制在哪里?

允许这样做的机制在哪里?

在 C# 编译器本身中。Nullable<T>是一种特殊的类型,具有许多额外的规则,包括如何处理null(比较和分配(以及如何处理运算符(请参阅:"提升的运算符"(。

运行时 支持Nullable<T>,特殊的"装箱"规则。

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

相关内容

最新更新