如果这是一个愚蠢的问题,请原谅,我正在尝试更好地理解 .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 的基础”,但是在 Nullable 类型中如何强制执行此操作?
And for
CustomNullable<int?> a2 = null;
CustomNullableClass<int?> a3 = null;
我收到错误“System.Nullable 类型必须是不可为 null 的值类型才能将其用作参数 T”。
我现在有点困惑,有人可以帮助我了解发生了什么事还是我不明白什么?
预先非常感谢。
编辑:
如果结构体是值类型并且值类型不能为 null,那么 Nullable 怎么可能是结构体?
信用:花钱者
实际上,这是 C# 编译器中某处的内部黑客攻击(猜测)。您无法在自己的课程中复制它。如果您使用完全相同的 IL 创建自己的类型,它将not强制执行额外的隐藏约束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)