5

我有一个自定义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[]>和一个对象初始化器,它通过继承接口并实现公共 voidAdd(double[] doubleVector)方法来接受以下使用

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

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

如何设置我的班级以接受我提供的论点?

4

1 回答 1

5

使用关键字定义Add方法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}
};
于 2015-10-28T12:53:02.640 回答