c# - 在 C# 中返回 IList<T> 与数组?

标签 c# .net arrays list mutability

我最近问某人为什么他更喜欢返回强类型数组而不是 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/

相关文章:

c# - AuthenticateRequest 和 AuthorizeAttribute 之间的自定义委托(delegate)人丢失

c# - 扩展方法可以应用于接口(interface)吗?

.Net 安装程序 - .exe 和 .msi 之间的差异

c# - 如何防止其他人在他们的 C# 应用程序中使用我的非托管 DLL?

c# - 为什么很多编程语言中的集合并不是真正的集合?

c# - DataflowBlock.Complete() 据说会阻止 block 产生更多消息,排队的项目会发生什么?

PHP 数组 - 删除键以开头的元素

python - NumPy 中通用函数的标识值是多少?它是干什么用的?

c - 数组排序C,正确吗?

c# - SQLite 数据库数据未复制到 Windows 8.1 Store App 中的 LocalFolder