我从https://referencesource.microsoft.com/中获取了Nullable
static void Main(string[] args)
{
NullableZZ<int> n1 = 100;
NullableZZ<int> n2 = null;
}
我遇到了这个错误:
错误CS0037无法将null转换为'NullableZZ',因为它是一个不可为null的值类型ConsoleApp2 C:\ Users \ Roman2 \ source \ repos \ ConsoleApp2 \ ConsoleApp2 \ Program.cs
为什么C#编译器不想编译它?编译Nullable
答案 0 :(得分:14)
为什么C#编译器不想编译它?
因为它没有您班级的任何特定知识,但是 有Nullable<T>
的特定知识。
编译
Nullable<T>
的“自己的”版本是否有一些“技巧”?
是的。对于任何非空值类型null
,Nullable<T>
文字都可以转换为T
,还可以转换为任何引用类型。它不能转换为NullableZZ<int>
。另外,int?
实际上是Nullable<int>
的简写-它具有特殊的处理方式。
基本上浏览一下规范(例如ECMA C# 5 spec),并在所有涉及Nullable<T>
的地方进行观察。您会在提到的地方找到很多。
可空值类型在框架,语言和CLR中具有支持:
Nullable<T>
类型必须存在于框架中