【问题标题】:C# matrix comparison operator overloading [closed]C#矩阵比较运算符重载
【发布时间】:2020-10-21 03:55:52
【问题描述】:

我正在尝试重载比较运算符,但我收到编译器错误 CS0029

当我使用普通的 return 语句时,我收到一个错误,要求我应该返回一个值,因此我使用了一个变量。

下面是代码

//Equal to operator
        public static bool operator ==(Matrix mat1, Matrix mat2)
        {
            bool boo = false;
            for (int i = 0; i < DimSize; i++)
                for (int j = 0; j < DimSize; j++)
                    if (mat1[i, j] == mat2[i, j])
                        boo = true;
                    else
                        boo = false;
            return boo;

        }


        //not equal to
        public static bool operator !=(Matrix mat1, Matrix mat2)
        {
            bool boo = false;
            for (int i = 0; i < DimSize; i++)
                for (int j = 0; j < DimSize; j++)
                    if (mat1[i, j] == mat2[i, j])
                        boo = true;
                    else
                        boo = false;
            return boo;
        }

【问题讨论】:

    标签: c# matrix operator-overloading comparison


    【解决方案1】:

    这是你的接线员:

    public static bool operator ==(Matrix mat1, Matrix mat2)
    

    它需要 2 个Matrix 实例并返回一个bool

    但是,您的代码会在 2 个 Matrix 实例上检查 == 并尝试将其混搭到另一个 Matrix

    Matrix sumMat = mat01 == mat02
                    >----bool----<
    

    这正是编译器告诉你的;您不能(至少在您当前的实现中)将 bool 转换为 Matrix

    你可能想要:

    bool sumMat = mat01 == mat02. 
       bool       >----bool----<
    

    如果没有,您将需要另一个 隐式运算符bool 转换为 Matrix

    public static implicit operator Matrix(bool b) => //somehow return a Matrix;
    

    【讨论】:

    • 为什么我不能在嵌套循环中返回任何东西?
    • @EmmanuelManoloSiame 嵌套循环不是你的问题,至少不是你的问题
    • 所以唯一的方法是制作一个将 bool 转换为 Matrix 的隐式运算符?
    • 啊哈,,,,XD,谢谢,我明白了我的错误。问题是我重载了 +-* 运算符,所以我一直使用 Matrix sumMat ,所以当我运行代码时,它给了我一个错误,我确信我用错了逻辑。
    • @EmmanuelManoloSiame 很高兴你知道了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 2016-02-16
    相关资源
    最近更新 更多