我在看 this article并且正在努力遵循解释提升运算符的 VB.NET 示例。似乎没有等效的 C# 示例或教程。一般来说,我在运算符重载方面没有太多经验,因此在阅读可空类型的同时尝试接受 VB.NET 等效项可能不是最好的起点...
谁能解释提升运算符以及它们如何被可空类型使用?这是否仅仅意味着可空类型本身不会重载运算符,而是会使用它所表示的基础类型中的运算符?
关于 SO 提升运算符的信息似乎不多,所以希望这也能帮助其他人。
最佳答案
提升运算符是通过“提升”已存在于不可空形式的运算符来处理可空类型的运算符。例如,如果您这样做:
int? x = 10;
int? y = 10;
int? z = x + y;
那个“+”运算符被取消了。它实际上并不存在于 Nullable<int>
上但 C# 编译器的行为就好像它确实如此,生成代码来做正确的事情。 (对于大多数情况,这是检查任一操作数是否为 null 的问题;如果是,则结果为 null。否则,将两个操作数解包为其不可为空的值,使用普通运算符,然后将结果包装回一个可以为 null 的值。尽管比较有一些特殊情况。)
请参阅 C# spec 的第 6.4.2 节(提升转换运算符)和第 7.3.7 节(提升运算符)获取更多信息。
关于c# - 什么是提升运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41851088/