我有一个Vector
可以通过多种方式初始化的自定义类。它具有以下构造函数来创建一个给定长度的全零向量。
public Vector(int length) { ... }
IEnumerable
或者它可以通过实现和这样的方法来使用对象初始化器Add(..)
来填充给定的向量
var v1 = new Vector{ 1, 2, 5 };
问题在于你可以写如下代码
var v1 = new Vector(3){ 1, 2, 5 };
这看起来很无辜,但它最终创建了一个长度为 6 的向量,其中前三个值为 0,然后接下来的 3 个值为 1、2、5。理想情况下,这将只返回一个长度为 3 且值为 1、2、5 的向量。我已经完成并逐步完成了对象初始化,似乎没有任何迹象表明正在创建对象。看起来好像构造函数运行了,然后Add()
调用了 3 个方法。如何判断它是调用该Add()
方法的对象初始化程序并保护该方法不创建附加值?
ps 从评论部分可以看出,这个类的 API 在问题中并不好。仍在进行中的工作,但我很欣赏评论,因为它帮助我进一步提出了我的想法。我将问题保留原样,以便评论有意义。