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

时间:2010-09-30 14:31:22

标签: 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}};

2 个答案:

答案 0 :(得分:4)

嗯,不是最后一个 - 但倒数第二个至少可能使用集合初始化器:

  • 实施IEnumerable(可以明确地完成,如果您真的不希望它被正常调用则抛出异常)
  • 创建Add(params double[] values)方法

麻烦的是,这使你的矩阵变得可变。您可能可能创建一个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();

答案 1 :(得分:3)

您可以使用隐式转换运算符来创建如下代码:

Matrix matrix = new double[,] {{1,0}, {1,1}, {1,5}};

这是相关代码:

class Matrix {
  // ...
  public static implicit operator Matrix(double[,] data) {
    return new Matrix(data);
  }
}