我正在查看 this article 并且正在努力遵循解释提升运算符的 VB.NET 示例。似乎没有等效的 C# 示例或教程。一般来说,我对运算符重载没有太多经验,因此在阅读可空类型的同时尝试与 VB.NET 等价物达成协议(protocol)可能不是最好的起点......

有没有人能够解释提升的运算符以及它们如何被可空类型使用?这是否只是意味着可空类型本身不会重载运算符,而是会使用它所代表的底层类型的运算符?

似乎没有太多关于提升运营商的信息,所以希望这也能帮助其他人。

最佳答案

提升运算符是通过“提升”已存在于不可空形式的运算符来处理可空类型的运算符。例如,如果你这样做:

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

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

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

关于c# - 什么是提升操作符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3370110/

10-13 06:21