我正在查看这篇文章,但在理解解释提升运算符的VB.NET示例时遇到了困难。似乎没有等价的C#示例或教程。我对一般情况下的操作符重载没有太多经验,因此在阅读空值类型的相关内容时,试图理解VB.NET版本并不是最好的开始...
有谁能够解释一下提升运算符以及它们如何被空值类型使用吗?这是否意味着空值类型本身不会重载运算符,并将使用所表示的基础类型的运算符?
关于提升运算符的信息似乎在SO上很少,因此希望这可以帮助其他人。
我正在查看这篇文章,但在理解解释提升运算符的VB.NET示例时遇到了困难。似乎没有等价的C#示例或教程。我对一般情况下的操作符重载没有太多经验,因此在阅读空值类型的相关内容时,试图理解VB.NET版本并不是最好的开始...
有谁能够解释一下提升运算符以及它们如何被空值类型使用吗?这是否意味着空值类型本身不会重载运算符,并将使用所表示的基础类型的运算符?
关于提升运算符的信息似乎在SO上很少,因此希望这可以帮助其他人。
提升操作符是指通过将操作符“提升”到非空类型中已经存在的操作符上,从而在可空类型上运行的操作符。因此例如,如果您执行以下操作:
int? x = 10;
int? y = 10;
int? z = x + y;
那个“+”操作符被提升了。在Nullable<int>上它实际上并不存在,但C#编译器会假装它存在,并生成相应的代码来完成操作。(对于大多数情况而言,这涉及到检查是否有任一操作数为null;如果是,结果就是null。否则,将两个操作数解包为非nullable值,使用正常的操作符,然后将结果重新封装回可空类型。不过,在比较方面还有一些特殊情况。)提升运算符允许预定义和用户定义的运算符也可用于其可空形式,即使是非空类型。
int i = 5;
int? j = 6;
int? k = j + i; // 11
int? q = i + null; // null - Shows a warning the result of the expression is always null of type int?
int r = i + null; // Throws an error the result of expression is always null of type int?