已知类型的C#泛型覆盖方法或对T进行操作

时间:2017-10-19 11:01:41

标签: c# generics

我正在使用泛型实现Matrix类,以便能够创建不同类型的对象,例如:

 Matrix<double> A = new Matrix<double>(10,20);
 Matrix<int> B = new Matrix<int>(10,20);
 Matrix<Complex> C = new Matrix<Complex>(14,25);

基本课程方案如下:

public class Matrix<T> : IFormattable, IEquatable<T>, IComparable 
  where T : struct, IEquatable<T>, IFormattable
{
    T[] _data { get; set; }

    public int columns;

    public int rows;

    // ...
}

由于我已经实现了上述对象的泛型类以及用于解析或迭代对象的构造函数和基本方法,因此一切正常。

此时我正在尝试对上面的通用Matrix对象实现基本的算术运算。从求和过程开始,我面临的问题是我无法在T对象中实现加法(矩阵的基数是T []对象)。因此,当我对两个T对象求和时,索引它们似乎给了我一个我无法克服的预期错误。作为一个例子,我希望以下代码对两个矩阵的元素求和:

for (int i = 0; i < rows; i++)
{
    for (int j = 0; j < columns; j++)
    {
        //Operator '+' cannot be applied to operands of type 'T' and 'T'
        C[i, j] = B[i,j] + this[i, j]; 
    }
}

我试图通过互联网上找到的几种解决方案克服上述问题,但我没有找到解决方案!

这有什么有效的解决方案吗?因为在T的案例类型中创建一个调用方法是double还是int等? 任何帮助将非常感激。 提前谢谢!

0 个答案:

没有答案