我从https://referencesource.microsoft.com/获取了Nullable <T>类的源代码并将其放到文件中并重命名为NullableZZ(以及NonVersionableAttribute的源代码到单独的文件中).当我试图构建下一个代码时:
static void Main(string[] args)
{
NullableZZ<int> n1 = 100;
NullableZZ<int> n2 = null;
}
Run Code Online (Sandbox Code Playgroud)
我有这个错误:
错误CS0037无法将null转换为'NullableZZ',因为它是一个不可为空的值类型ConsoleApp2 C:\ Users\Roman2\source\repos\ConsoleApp2\ConsoleApp2\Program.cs
为什么C#编译器不想编译它?是否有一些"技巧"来编译其"自有"版本的Nullable <T>?
Jon*_*eet 15
为什么C#编译器不想编译它?
因为它对你的班级没有任何具体的知识,但它确实具有特定的知识Nullable<T>.
是否有一些"技巧"来编译其"自己的"版本
Nullable<T>?
是.的null文字是转换为Nullable<T>任何非空值类型T,并且还任何引用类型.它不可转换为NullableZZ<int>.此外,int?有效的简写Nullable<int>- 它有特殊的待遇.
基本上查看规范(例如ECMA C#5规范)并观察它所谈论的所有地方Nullable<T>.你会发现很多提到的地方.
Nullable值类型在框架,语言和CLR中都有支持:
Nullable<T>类型必须存在于框架中| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |