c# - 如何在 C# 中模拟/继承数组初始化语法?

标签 c# arrays initialization

我正在构建一个矩阵类(我知道存在一个),我正在考虑初始化。目前初始化之一是

  double[,] data;
  public Matrix(double[,] data)
  {
      if (data.GetLength(0) == 0 || data.GetLength(1) == 0)
      {
          throw new ArgumentException();
      }
      this.data = (double[,])(data.Clone());
  }

这很好,因为它可以像

一样初始化
  Matrix matrix= new Matrix(new double[,]{{1, 0  , 0  },
                                           {1, 0.5, 0  }});

有没有办法做到更紧凑,比如

  Matrix matrix= new Matrix{{1,0}, {1,1}, {1,5}};

甚至更好

  Matrix matrix = {{1,0}, {1,1}, {1,5}};

最佳答案

好吧,不是最后一个 - 但倒数第二个至少使用集合初始值设定项可能:

  • 实现 IEnumerable (可以显式完成,如果您确实不希望正常调用它,则抛出异常)
  • 创建一个 Add(params double[] value) 方法

问题是,这会让你的矩阵变得可变。您可以创建一个MatrixBuilder类,并使用:

Matrix matrix = new MatrixBuilder{{1,0}, {1,1}, {1,5}}.Build();

当然还有其他问题 - 您需要检查“矩阵”是否在中途突然开始改变尺寸,例如

Matrix matrix = new MatrixBuilder{{1,0}, {1,1,2,2,2,2,2,2}, {1,5}}.Build();

关于c# - 如何在 C# 中模拟/继承数组初始化语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3831577/

相关文章:

C++ 初始化列表

c++ - C vector 错误 'char(*)[]: unknown size' - vector 删除迭代器超出范围

c# - 使用 XNA 绘制矩形

c# - "scroll"单行文本框

c# - 更改类对象列表中项目值的正确方法

java - 如何创建通用数组?

javascript - 在可编辑的 div 中使用多维数组?

android - ExceptionInInitializerError 异常

C++ Vector<int> 数组初始化

c# - 从静态方法调用 Response.TransmitFile()