Nullable 是不可能的,为什么不呢?

对不起,如果它是一个愚蠢的问题,我试图更好地了解.Net中的Nullable类型。

从我注意到的Microsoft源代码(使用ReSharper),我知道Nullable是一个结构,T需要是一个结构

public struct Nullable where T : struct 

现在,我试着做这样的事情

 public struct CustomNullable where T : struct { } public class CustomNullableClass where T : struct { } 

我编译时遇到错误:

  Nullable a = null; Nullable<Nullable> a1 = null; 

对于上面提到的代码,我得到一个错误’只有非可空的值类型可能是System.Nullable的基础’,但是如何在Nullable类型中强制执行?

并为

  CustomNullable a2 = null; CustomNullableClass a3 = null; 

我得到一个错误’类型System.Nullable必须是不可为空的值类型才能将其用作参数T’。

我现在有点困惑,有人可以帮助我理解发生了什么或者我不明白的东西?

非常感谢提前。

编辑:如果结构是值类型而值类型不能为null,那么Nullable如何成为结构?

信用:消费者

实际上,它是C#编译器(猜测)中的某个内部黑客。 您无法在自己的类中复制它。 如果您使用完全相同的IL创建自己的类型,则不会强制执行该额外的隐藏约束。

有专门针对Nullable特殊编译器支持。 您无法使用自定义结构复制Nullable的许多不同行为。 其中一个行为就是你在这里提到过的行为, Nullable不满足结构的generics约束,尽管它是一个struct