我看到的是this article,我正在努力学习解释提升运算符的VB.NET示例.似乎没有等效的C#示例或教程.一般来说,我在操作符重载方面没有太多经验,所以在阅读可空类型的同时try 使用VB.NET等效项可能不是最好的起点……

有谁能解释一下提升运算符,以及可为空的类型是如何使用它们的?这是否仅仅意味着可空类型本身不会重载运算符,并且将使用它所表示的基础类型中的运算符?

似乎没有太多关于解除操作员的信息,所以希望这也能帮助其他一些人.

推荐答案

提升运算符是通过"提升"不可为空形式上已经存在的运算符来处理可为空类型的运算符.例如,如果你这样做:

int? x = 10;
int? y = 10;
int? z = x + y;

那个"+"操作符被解除.它实际上并不存在于Nullable<int>上,但C#编译器的行为就像它存在一样,生成代码来做正确的事情.(在大多数情况下,这是一个判断任一操作数是否为null的问题;如果为null,则结果为null.否则,将两个操作数展开为其不可为null的值,使用普通运算符,然后将结果包装回可为null的值.不过,在比较方面有一些特殊情况.)

有关详细信息,请参阅C# spec的第6.4.2节(提升转换运算符)和7.3.7节(提升运算符).

.net相关问答推荐

从没有流的EventStore中读取流不存在异常

使用.NET 8时无法识别运行标识符

Azure SignalR 和微服务

.Net MAUI Android 无法与 API localhost 对话

无法解析此引用.找不到程序集

IEnumerable Count() 和 Length 的区别

我应该从 .NET 中的 Exception 或 ApplicationException 派生自定义异常吗?

多个等待与 Task.WaitAll - 等效?

为什么 LINQ .Where(predicate).First() 比 .First(predicate) 快?

[DllImport("QCall")] 是什么?

InternalsVisibleTo 属性不起作用

实体框架 - 无法将 lambda 表达式转换为类型字符串,因为它不是委托类型

日期时间是什么意思?在 C# 中是什么意思?

C# 编译为 32/64 位,或任何 cpu?

无法将文件 *.mdf 作为数据库附加

公钥令牌的作用是什么?

如何使用 c# 仅获取目录中的文件名?

如何知道 DateTime 是否在 C# 中的 DateRange 之间

/langversion 的错误选项6无效;必须是 ISO-1、ISO-2、3、4、5 或默认值

在类型 c# 上切换大小写