什么是解除运营商?

fle*_*her 56 .net c# nullable lifted-operators

我正在看这篇文章,并且正在努力遵循解释提升运算符的VB.NET示例.似乎没有相应的C#示例或教程.我一般都没有太多关于运算符重载的经验,因此在阅读可空类型的同时尝试使用VB.NET等价物可能不是最好的开始...

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

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

Jon*_*eet 110

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

int? x = 10;
int? y = 10;
int? z = x + y;
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这个答案并没有说明"正确的事情"实际上是什么,我认为这是提升运营商工作的最重要方面. (4认同)
  • @Cᴏʀʏ:当我链接到它时,它是 C# 4 规范,但该链接现在转到 C# 5 规范......几个月后可能是 C# 6 规范:) (2认同)