【问题标题】:Define operator for List in C#在 C# 中为 List 定义运算符
【发布时间】:2016-01-11 16:04:56
【问题描述】:

我想在 C# 中为 List 定义一些操作。 例如,加法 (+) 和转置 (')。 但是,当我编译代码时出现了错误。 我定义了一个继承自 List> 的矩阵类。 此外,我实现了 + 和 ' 运算符。 第一个很好,但是当我主要调用它时,会出现错误。 第二种方法甚至无法编译。 有人可以帮忙吗? 非常感谢。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace test
{
    class Matrix : List<List<double>>
    {
        public static Matrix operator +(Matrix a, Matrix b)
        {
            Matrix c = new Matrix();
            int i, j;

            for (i = 0; i < a.Count; i++)
            {
                for (j = 0; j < a[1].Count; j++)
                {
                    c[i][j] = a[i][j] + b[i][j];
                }

            }

            return c;

        }


        public static Matrix operator ' (Matrix a)
        {
            Matrix b = new Matrix();
            int i, j;

            for (i = 0; i<a.Count; i++)
            {
                for (j = 0; j < a[1].Count; j++)
                {
                 b[j][i] = a[j][i];
                }

            }

            return b;

        }


        public static int Main(string[] args)
        {

            Matrix x = new Matrix { new List<double> { 1, 2, 5, 2 }, new List<double> { 3, 4, 0, 7 } };
            Matrix y = new Matrix { new List<double> { 1, 2, 5, 2 }, new List<double> { 3, 4, 0, 7 } };
            Matrix z = new Matrix();

            z = x + y;

            Console.WriteLine(z);

            return 0;
        }
    }
}

【问题讨论】:

标签: c# matrix operator-keyword


【解决方案1】:

' 不是有效的运算符。可重载的运算符有:
一元:+ - ! ~ ++ -- 真假
二进制:+ - * / % & | ^ > == != =

其中一些也有限制。例如,比较运算符必须成对重载,移位运算符(>)的第二个参数必须是 int

看看:C# overloadable operators

【讨论】:

  • 好的,我们先忽略 ' 方法。如何更正“+”中的错误?
  • Matrix 有什么问题 x = new Matrix { new List { 1, 2, 5, 2 }, new List { 3, 4, 0, 7 } };矩阵 y = 新矩阵 { new List { 1, 2, 5, 2 }, new List { 3, 4, 0, 7 } };矩阵 z = 新矩阵(); z = x + y;
  • @Frankie Matrix c = new Matrix(); 将创建一个空矩阵。它不包含内部列表。这就是为什么您会在c[i][j] = a[i][j] + b[i][j]; 线上获得ArgumentOutOfRangeException
  • 我把它改成了: Matrix x = new Matrix { new List { 1, 2, 5, 2 }, new List { 3, 4, 0, 7 } };矩阵 y = 新矩阵 { new List { 1, 2, 5, 2 }, new List { 3, 4, 0, 7 } };矩阵 z = 新矩阵 { 新列表 { 1, 2, 5, 2 }, 新列表 { 3, 4, 0, 7 } }; z = x + y;但是也会出现错误
  • Matrix z = new ... 完全没用。你在下一行给 z 另一个值。就做吧Matrix z = x + y; 但问题出在operator+方法上。
猜你喜欢
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 2014-05-21
  • 2011-01-19
相关资源
最近更新 更多