2010-09-30 44 views
2

我正在构建一个矩阵类(我知道存在一个),我正在考虑初始化。目前初始化之一是如何模仿/继承数组初始化syntaxin c#?

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}}; 

回答

4

嘛,不是最后的 - 但倒数第一位是至少可能使用集合初始化:

  • 实现IEnumerable(可以明确地做,抛出一个异常,如果你真的不想要它被通常称为)
  • 创建Add(params double[] values)方法

麻烦的是,这使得你的矩阵可变的。您可以潜在创建MatrixBuilder类,并使用:

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

还有其他的问题,当然-you'd需要检查的是“黑客帝国”并不是突然开始改变尺寸中途,例如

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

您可以使用隐式转换操作符像这样创建代码:

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

这是相关代码:

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