运算符重载与泛型

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在使用这个时,我有一个错误,

Error: Operator '+' cannot be applied to operands of type 'T' and 'T'
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议我使用泛型运算符重载的方式吗?

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;
    }
}
Run Code Online (Sandbox Code Playgroud)