昨天我花了一些时间试图找到一个错误。长话短说,最后我意识到是因为这个构造函数:
public Triangle(List<Vertex> vertices) {
this._values = vertices;
}
我试图用值列表初始化一个对象,但该对象只是引用了我的对象,而不是从列表中获取值。如果我不放弃作为参数传递的列表并稍后将其用于其他用途,例如用相同的值初始化其他内容,或者如果我决定清除它并填充新值,我显然会破坏我的状态 Triangle
对象而不自知。
我的第一 react 是在构造函数中“修复错误”,但后来我开始思考它是否真的应该如此。涵盖此类事情的良好做法是什么?一般来说,我应该如何看待采用值列表的构造函数/初始化方法?他们应该保持原样吗?我可以重复使用该列表吗?当它导致错误时,是谁的错?
我的意思是,我显然可以做这样的事情:
var triangle = new Triangle(new List<Vertex>(vertices));
但是 Triangle
类的创建者不应该已经完成了吗?
我想知道一些指导方针。谢谢。
最佳答案
是的,接收类(Triangle)应该复制一份,除非设计是有意共享 List。
共享可能有用,但异常(exception)。我认为 Triangle 不想与其他东西共享它的顶点列表。
请注意,它可能仍然共享顶点(元素)。
关于c# - 我应该重用作为参数传递的集合吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5041489/