使用扩展方法重载运算符

时间:2013-12-11 17:37:55

标签: c# .net 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;
    }
}

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

PS。

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

PPS。

“已解决”使用

public static int? Add(this int? value1, int? value2)

2 个答案:

答案 0 :(得分:5)

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

您不需要(也不能)这样做。

答案 1 :(得分:2)

运算符重载允许为一个或两个操作数是用户定义的类或结构类型的操作指定用户定义的运算符实现。

您尝试实现的运算符重载不涉及任何结构或任何数据类型。那你的代码没有编译。

您可以找到相同here

的参考

修改

您不需要重载操作符而是使用此

var result = value1.GetValueOrDefault() + value2.GetValueOrDefault();

此外,运算符重载是在Type类或结构的范围内实现的。

您可以使用像这样的扩展方法

public static class Utils
    {
        public static int? Sum(this 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;
        }
    }