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}
}; |
- 今天学到了一些东西。谢谢你的帮助!
- 类是否需要实现IEnumerable才能使用它?
- 但矩阵的长度和宽度应该相等
- @M.Kazemakhgary你不能保证在C中除了运行时检查之外
- @Derekvancuyk我在最初的问题中说我已经继承了IEnumerable
- 很好的解决方案。谢谢