矩阵过载运算符c#

Mar*_*tes 2 c# overloading operators matrix

我需要的是在C#中重载Operator +所以我可以总结2个矩阵.

我有这个功能:

public int[,] operator+(int[,] matriz1, int[,] matriz2)
    {
        int[,] retorno = new int[4, 4];
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                retorno[i, j] = matriz1[i, j] + matriz2[i, j];
            }
        }
        return retorno;
    }
Run Code Online (Sandbox Code Playgroud)

当我这样做时(WT,W1,W2都是int [4,4]):

WT = W1 + W2;
Run Code Online (Sandbox Code Playgroud)

我得到一个错误说:operator +不能应用于int [ , ]和int [ , ] 类型的操作数,我做错了什么,我该如何解决?

Jac*_*cob 6

好吧,首先,在你尝试使用运算符之前,尝试仅编译运算符方法.它不会编译,错误消息告诉:

错误CS0563:二元运算符的其中一个参数必须是包含类型

这正是它所说的:如果你写一个类C,你可以为C + <any type>(或<any type> + C)编写一个加法运算符.您无法定义不C以某种方式涉及的运算符.所以,简单地说,因为你不是那个编写int[,]类的人,所以你不能为它定义一个运算符.

您最好的选择可能是自己定义一个Matrix类,然后您可以定义您想要的任何操作符.例如;

public class Matrix
{
    private readonly int[,] _values;

    public int this[int x, int y] {
        get { return _values[x, y]; }
    }

    public Matrix(int[,] values) {
        _values = values;
    }

    public static Matrix operator +(Matrix x, Matrix y) {
        int[,] m0 = x._values;
        int[,] m1 = y._values;
        int[,] newMatrix = /* add m0 and m1 */;
        return new Matrix(newMatrix);
    }
}
Run Code Online (Sandbox Code Playgroud)