对不起,如果这是一个愚蠢的问题,我试图更好地理解.Net中的Nullable类型。
从我从Microsoft源代码(使用ReSharper)获得的信息中,我了解到Nullable是一个结构,而T必须是一个结构
public struct Nullable<T> where T : struct
现在,我试图做这样的事情
public struct CustomNullable<T> where T : struct
{
}
public class CustomNullableClass<T> where T : struct
{
}
而且在编译时出现错误:
Nullable<int?> a = null;
Nullable<Nullable<int>> a1 = null;
对于上面提到的代码,我得到一个错误“ System.Nullable只能包含不可为null的值类型”,但是在Nullable类型中如何实现呢?
而对于
CustomNullable<int?> a2 = null;
CustomNullableClass<int?> a3 = null;
我收到错误消息“类型System.Nullable必须是不可为空的值类型,才能将其用作参数T”。
我现在有点困惑,有人可以帮助我了解发生了什么还是我不了解某些事情?
非常感谢。
编辑:如果结构是值类型,并且值类型不能为null,那么Nullable如何成为结构?
贷方:支出者
实际上,这是C#编译器(猜测)中的内部漏洞。您不能在自己的类中复制它。如果使用完全相同的IL进行自己的类型输入,则不会强制执行该附加的隐藏约束。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句