泛型和“二元运算符的参数之一必须是包含类型”错误

时间:2011-07-31 19:30:52

标签: c# operators operator-overloading

声明二元运算符时,至少有一个操作数类型必须是包含类型。这听起来总体上是一个很好的设计决定。但是,我没想到以下代码会导致此错误:

public class Exp<T>
{
    public static Exp<int> operator +(Exp<int> first, Exp<int> second)
    {
        return null;
    }
}

此运营商有什么问题?为什么这种情况属于c#的运算符重载限制?允许这种声明是危险的吗?

2 个答案:

答案 0 :(得分:5)

因为包含类型为Exp<T>,而不是Exp<int>。你在这里要做的是专门化 a la C ++,这在C#中是不可能的。

答案 1 :(得分:3)

您所属的类型为Exp<T>,运算符中的参数均不是Exp<T>,而是Exp<int>

阅读this article了解建议的方法。