如何为矩阵实现干净的自定义对象初始化器 class
How to implement a clean Custom Object Initializer for a Matrix class
我有一个自定义 Matrix
class,我想实现一个类似于 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 中)。
如何设置我的 class 以接受我提供的论点?
用params
关键字定义Add
方法并忽略数组中比矩阵宽度长的结束元素
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}
};
我有一个自定义 Matrix
class,我想实现一个类似于 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 中)。
如何设置我的 class 以接受我提供的论点?
用params
关键字定义Add
方法并忽略数组中比矩阵宽度长的结束元素
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}
};