c# - 我应该重用作为参数传递的集合吗

标签 c# .net reference parameter-passing

昨天我花了一些时间试图找到一个错误。长话短说,最后我意识到是因为这个构造函数:

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/

相关文章:

c# - 编写一个 Task.WhenAll/WhenAny 变体,取消第一个故障/取消任务上的所有其他任务

c# - VS 安装项目 - .Net Framework 3.5 或更高版本的启动条件

c# - 如何在不向用户安装整个组件的情况下部署使用 ODAC 的 .NET 应用程序?

c# - 查找枚举成员

c++ - 为什么 `const int& k = i;++i; ` 可能?

c++ - 你如何调用一个返回引用或抛出异常的函数而无需体操?

c# - 使用 JSON.NET 将递归 JSON 反序列化为 C#

c# - 什么时候应该使用 String.Format 或 String.Concat 而不是串联运算符?

c# - 如何对线程安全队列进行单元测试

c++ - 引用容器/不可空指针