关于c#:如何为Matrix类实现干净的自定义对象初始化程序

How to implement a clean Custom Object Initializer for a Matrix class

我有一个自定义的Matrix类,我想实现一个自定义对象初始值设定项,类似于double[,]可以使用的,但似乎不知道如何实现它。

理想情况下我想让它看起来像这样

1
2
3
4
5
var m1 = new Matrix
        {
            { 1.0, 3.0, 5.0 },
            { 7.0, 1.0, 5.0 }
        };

到目前为止,我有一个常规的构造函数,它的签名是

1
public Matrix(double[,] inputArray){...}

接受这样的电话

1
2
3
4
5
var m1 = new Matrix(new double[,]
        {
            { 1.0, 3.0, 5.0 },
            { 7.0, 1.0, 5.0 }
        });

以及通过继承IEnumerable接口和实现公共void Add(double[] doubleVector)方法接受以下使用的对象初始化器。

1
2
3
4
5
var m2 = new Matrix
        {
            new [] { 1.0, 3.0, 5.0 },                
            new [] { 7.0, 1.0, 5.0 }
        };

当我尝试使用对象初始化器时,我想得到一个编译器错误,即没有Add的重载,它接受x个参数,其中x是我试图创建的列数(即在我提供的示例3中)。

我怎样才能让我的班级接受我提供的论点呢?


方法和一个关键字定义Addparams忽略结尾的元件阵列,这是超过矩阵宽度

1
2
3
4
public void Add(params double[] doubleVector)
{
   // code
}

如果一个元素的数组的短,默认是左(0)

1
2
3
4
5
6
// sample
var M = new Matrix()
{
    { 1.2, 1.0 },
    { 1.2, 1.0, 3.2, 3.4}
};