PlT*_*lor 5 c# object-initializers collection-initializer
我有一个自定义Matrix类,我想实现一个自定义对象初始化程序,类似于double [,]可以使用,但似乎无法弄清楚如何实现它.
理想情况下,我希望看起来像这样
var m1 = new Matrix
{
{ 1.0, 3.0, 5.0 },
{ 7.0, 1.0, 5.0 }
};
Run Code Online (Sandbox Code Playgroud)
截至目前,我有一个带有签名的常规构造函数
public Matrix(double[,] inputArray){...}
Run Code Online (Sandbox Code Playgroud)
接受这样的电话
var m1 = new Matrix(new double[,]
{
{ 1.0, 3.0, 5.0 },
{ 7.0, 1.0, 5.0 }
});
Run Code Online (Sandbox Code Playgroud)
和一个对象初始化程序,通过继承IEnumerable<double[]>接口和实现公共void Add(double[] doubleVector)方法来接受以下使用
var m2 = new Matrix
{
new [] { 1.0, 3.0, 5.0 },
new [] { 7.0, 1.0, 5.0 }
};
Run Code Online (Sandbox Code Playgroud)
当我尝试使用对象初始化器时,我想得到一个没有重载的编译器错误Add,需要X个参数,其中X是我试图创建的列数(即在我提供的示例3中).
如何设置我的课程来接受我提供的论证?
Add使用params关键字定义方法并忽略数组中的结束元素,该元素长于矩阵宽度
public void Add(params double[] doubleVector)
{
// code
}
Run Code Online (Sandbox Code Playgroud)
如果数组较短,则默认元素为left(0)
// sample
var M = new Matrix()
{
{ 1.2, 1.0 },
{ 1.2, 1.0, 3.2, 3.4}
};
Run Code Online (Sandbox Code Playgroud)