使用扩展方法重载运算符

ser*_*hio -2 .net c# operator-overloading

我在nullable int之间定义了这样的加法:

public static class Utils
{
    public static int? operator +(int? value1, int? value2)
    {
        if (!value1.HasValue && !value2.HasValue)
            return null;

        int myValue1 = value1.HasValue ? value1.Value : 0;
        int myValue2 = value2.HasValue ? value1.Value : 0;

        return myValue1 + myValue2;
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以在.NET 3.5中使用此运算符?
是否可以在早期版本的.NET中使用?

PS.

显然实际上没有(?)方法使用扩展方法重载运算符,因为扩展方法必须在静态类中,而静态类不能有操作符重载....

PPS.

"已解决"使用

public static int? Add(this int? value1, int? value2)
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

C#已经将所有运营商"提升"为可空类型.
如果任一操作数为null,则运算符将返回null.

你不需要(也不能)这样做.

  • C#不支持扩展操作符(语言团队考虑过这一点,并决定不这样做).因此,您只能定义涉及您自己的类型的运算符. (3认同)
  • 不,你不能.并且,可空类型中的"null"点表示_unknown_数量.未知数量加五不是五; 它也是未知数. (2认同)
  • 你可以写`(x ?? 0)+(y ?? 0)`.注意优先顺序. (2认同)