如何为Matrix类实现干净的自定义对象初始值设定项

时间:2015-10-28 12:45:47

标签: c# object-initializers collection-initializer

我有一个自定义Matrix类,我想实现一个自定义对象初始值设定项,类似于double [,]可以使用但似乎无法弄清楚如何实现它。

理想情况下,我希望看起来像这样

var m1 = new Matrix
        {
            { 1.0, 3.0, 5.0 },
            { 7.0, 1.0, 5.0 }
        };

截至目前,我有一个带有

签名的常规构造函数
public Matrix(double[,] inputArray){...}

接受像这样的电话

var m1 = new Matrix(new double[,]
        {
            { 1.0, 3.0, 5.0 },
            { 7.0, 1.0, 5.0 }
        });

和一个对象初始化程序,通过继承IEnumerable<double[]>接口并实现public void Add(double[] doubleVector)方法来接受以下使用

var m2 = new Matrix
        {
            new [] { 1.0, 3.0, 5.0 },                
            new [] { 7.0, 1.0, 5.0 }
        };

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

如何设置我的课程来接受像我提供的论点?

1 个答案:

答案 0 :(得分:5)

使用params关键字定义public void Add(params double[] doubleVector) { // code } 方法并忽略数组中的结束元素,该元素长于矩阵宽度

0

如果数组较短,则保留默认元素(// sample var M = new Matrix() { { 1.2, 1.0 }, { 1.2, 1.0, 3.2, 3.4} };

<a href="aaa">
    abcd
    <div style="font-style:italic;">
        efgh
    </a>
    ijkl
</div>