c# - 什么是提升运算符?

标签 c# .net nullable lifted-operators

我在看 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/

相关文章:

c# - 比较两个可为空的日期

c# - Facebook 登录未返回用户电子邮件

c# - 有没有比 count++ 更优雅的方法来处理 foreach 枚举中的第一个和最后一个项目?

c# - CaSTLe Windsor 命名空间冲突

c# - 你能在 C# 中编写一段 C++ 代码吗?

c# - 在方法中使用 Nullable Type 会出错

c# - 在抽象基类中定义的 clr 属性的 Setter,仅具有 getter

javascript - 为 Angular 图创建动态对象

c# - 在 DocumentReady 事件中文档没有准备好?

c# - 在运行时获取 Nullable<T> 的类型 (T)?