Suj*_*jit 14 c# generics operator-overloading
可能重复:
C#中泛型类的算术运算符重载
这是我创建的泛型类的代码,用于将复数添加到重载运算符.
public class Complex<T>
{
    public T _a, _b;
    public Complex(T i, T j)
    {
        _a = i;
        _b = j;
    }
    public static Complex<T> operator +(Complex<T> i, Complex<T> j)
    {
        return new Complex<T>(i._a + j._a, i._b + j._b);
    }
}
在使用这个时,我有一个错误,
Error: Operator '+' cannot be applied to operands of type 'T' and 'T'
任何人都可以建议我使用泛型运算符重载的方式吗?
Ere*_*mez 26
问题是编译器无法知道+运算符是否可以应用T.不幸的是,没有办法限制T为C#中的数字类型.
但是,您可以使用动态运行时解决此问题:
public class Complex<T> where T : struct
{
    public T _a, _b;
    public Complex(T i, T j)
    {
        _a = i;
        _b = j;
    }
    public static Complex<T> operator +(Complex<T> i, Complex<T> j)
    {
        return new Complex<T>(Sum(i._a, j._a), Sum(i._b, j._b));
    }
    private static T Sum(T a, T b)
    {
        return (dynamic)a + (dynamic)b;
    }
}