我正在构建一个矩阵类(我知道存在一个),我正在考虑初始化。目前其中一个初始化是
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}};
答案 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);
}
}