昨天我花了一些时间来寻找错误。长话短说,终于我意识到这是因为这个构造函数:public Triangle(List<Vertex> vertices) { this._values = vertices;}我试图用值列表初始化对象,而该对象只是引用了我的对象,而不是从列表中获取值。如果我不放弃作为参数传递的列表,以后再将其用于其他操作,例如使用相同的值初始化其他内容,或者如果我决定清除它并填充新值,则显然会破坏对象,但不知道。我的第一个反应是在构造函数中“修复错误”,但随后我开始考虑它是否确实应该如此。涵盖此类事情的良好实践是什么?通常,我应该考虑采用值列表的构造函数/ init方法吗?他们应该保持原样吗?我是否可以重用该列表,导致错误的是谁的错?我的意思是,我显然可以做这样的事情:var triangle = new Triangle(new List<Vertex>(vertices));但不是应该已经由Triangle类的创建者完成了吗?我想知道一些准则。谢谢。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 我个人同意亨克;您应该创建一个副本。 /// <summary> /// Initialises a new instance of the <see cref="Triangle"/> class that /// contains elements copied from the specified collection. /// </summary> /// <param name="vertices"> /// The collection of vertices whose elements are to be copied. /// </param> public Triangle(IEnumerable<Vertex> vertices) { this.Vertices = new List<Vertex>(vertices); }无论您选择什么,都必须确保记录在案,以便消费者知道预期的行为。因此,消费者知道他们可以安全地呼叫new Triangle(vertices)。关于c# - 我应该重用作为参数传递的集合吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5041489/ (adsbygoogle = window.adsbygoogle || []).push({}); 10-10 03:06