我看到的是this article,我正在努力学习解释提升运算符的VB.NET示例.似乎没有等效的C#示例或教程.一般来说,我在操作符重载方面没有太多经验,所以在阅读可空类型的同时try 使用VB.NET等效项可能不是最好的起点……
有谁能解释一下提升运算符,以及可为空的类型是如何使用它们的?这是否仅仅意味着可空类型本身不会重载运算符,并且将使用它所表示的基础类型中的运算符?
似乎没有太多关于解除操作员的信息,所以希望这也能帮助其他一些人.
我看到的是this article,我正在努力学习解释提升运算符的VB.NET示例.似乎没有等效的C#示例或教程.一般来说,我在操作符重载方面没有太多经验,所以在阅读可空类型的同时try 使用VB.NET等效项可能不是最好的起点……
有谁能解释一下提升运算符,以及可为空的类型是如何使用它们的?这是否仅仅意味着可空类型本身不会重载运算符,并且将使用它所表示的基础类型中的运算符?
似乎没有太多关于解除操作员的信息,所以希望这也能帮助其他一些人.
提升运算符是通过"提升"不可为空形式上已经存在的运算符来处理可为空类型的运算符.例如,如果你这样做:
int? x = 10;
int? y = 10;
int? z = x + y;
那个"+"操作符被解除.它实际上并不存在于Nullable<int>
上,但C#编译器的行为就像它存在一样,生成代码来做正确的事情.(在大多数情况下,这是一个判断任一操作数是否为null的问题;如果为null,则结果为null.否则,将两个操作数展开为其不可为null的值,使用普通运算符,然后将结果包装回可为null的值.不过,在比较方面有一些特殊情况.)
有关详细信息,请参阅C# spec的第6.4.2节(提升转换运算符)和7.3.7节(提升运算符).