【发布时间】:2009-05-29 17:25:29
【问题描述】:
我在我的应用程序中使我的大部分基本类型不可变。但是集合也应该是不可变的吗?对我来说,这似乎是一笔巨大的开销,除非我遗漏了什么。
我说的是保存 Point3 值等的集合,这些集合可以在不同时间添加。因此,如果一个集合中有 1M 个值,而您需要删除其中 1 个,则必须重新创建相同的集合,对吗?
【问题讨论】:
-
有一些方法可以重用不可变集合的不变部分。如果要添加到末端,堆栈和列表通常可以 100% 重复使用,树通常只需要重建 O(lg n) 个节点。在我的博客上查看我的“不变性”档案,了解这里的一些想法。
-
但这就是说:选择能够很好地模拟您的问题的工具。如果您的问题可以通过可变集合很好地建模,那么请使用可变集合。也就是说,如果集合即使在发生突变时仍保持其身份,则使其可变。相比之下,如果您认为集合在更改时是一个完全不同的集合,那么不可变集合是有意义的。
标签: c# .net immutability