c# - 使用泛型重载运算符

标签 c# generics operator-overloading

<分区>

Possible Duplicate:
Arithmetic operator overloading for a generic class in 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'

谁能建议我使用泛型运算符重载的方法?

最佳答案

问题是编译器不知道 + 运算符是否可以应用于 T。遗憾的是,在 C# 中无法将 T 限制为数字类型。

但是,您可以使用动态运行时解决此问题:

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;
    }
}

关于c# - 使用泛型重载运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14020486/

相关文章:

dart - Dart中的元编程性能

c# - 显示文本框中的内容

c# - 在 MVVM 中动态填充 Wrappannel

java - 扩展泛型

generics - Box inverse traits/Where boxes 子句

c++ - (a==1)&&(a==2)&&(a==3) 可以计算为真吗? (它有用吗?)

c++ - 赋值运算符是否适用于不同类型的对象?

C# 使用模板将网格导出到 word

c#舍入规则

java - 为什么从接口(interface)执行方法时会将参数转换为 Object(或扩展 YourObject)?