我最近问某人为什么他更喜欢返回强类型数组而不是 IList。我一直认为面对一个生命周期很长的项目时,针对接口(interface)编程是最灵活、最好的编程方式。所以当他回答时我觉得很奇怪:
We typically prefer immutable types over mutable ones. Arrays are immutable. IList is not.
我不完全确定我理解这个陈述。谁能帮忙澄清一下?
感谢你们提供的任何帮助。
最佳答案
无论“他”是谁,在这个话题上都是 100% 错误的。数组是非常可变的。这实际上是不返回数组的原因之一。无法阻止调用者随意更改数组元素。
Arrray 不可变的唯一方式是它的长度。一旦分配了一个数组,它的长度就不能改变。即使像 Array.Resize 这样的 API 实际上也不会调整数组的大小,它们只是分配一个新数组,复制内容并返回新数组(在本例中是通过引用)。
不过,我确实同意,在许多情况下,返回不可变数据会更好。第一个是它允许您返回对类内部集合的引用而无需进行完整复制,同时防止调用者扰乱您的内部状态。大多数可变集合不能做出这样的保证。
关于c# - 在 C# 中返回 IList<T> 与数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/815895/