gpt4 book ai didi

c# - 为什么我不能创建自己的 Nullable 类似物?

转载 作者:太空狗 更新时间:2023-10-30 00:04:26 28 4
gpt4 key购买 nike

我从 https://referencesource.microsoft.com/ 中获取了 Nullable 类的源代码并将其放入文件并重命名为 NullableZZ(以及 NonVersionableAttribute 的来源到单独的文件中)。当我尝试构建下一个代码时:

static void Main(string[] args)
{
NullableZZ<int> n1 = 100;
NullableZZ<int> n2 = null;
}

我遇到了这个错误:

Error CS0037 Cannot convert null to 'NullableZZ' because it is a non-nullable value type ConsoleApp2 C:\Users\Roman2\source\repos\ConsoleApp2\ConsoleApp2\Program.cs

为什么C#编译器不想编译呢?是否有一些“技巧”来编译其“自己的”版本的 Nullable

最佳答案

Why the C# compiler does not want to compile it?

因为它没有关于你的类的任何特定知识,但它确实有关于 Nullable<T> 的特定知识.

Has it some "tricks" to compile its "own" version of Nullable<T>?

是的。 null文字可转换为 Nullable<T>对于任何不可为空的值类型 T ,以及任何引用类型。它不能转换为 NullableZZ<int> .另外,int?Nullable<int> 的有效简写- 它有特殊待遇。

基本上浏览规范(例如 ECMA C# 5 spec )并观察它谈论 Nullable<T> 的所有地方.您会发现 很多 它提到的地方。

可空值类型在框架、语言和 CLR 中得到支持:

  • Nullable<T>类型必须存在于框架中
  • 该语言具有此答案中所述的支持
  • CLR 支持验证泛型约束和装箱(其中可空值类型的空值装箱到空引用)

关于c# - 为什么我不能创建自己的 Nullable<T> 类似物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52784113/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com