You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

当前IEnumerable是否比IReadOnlyList具备更强的封装安全性?

暴露集合成员:IReadOnlyCollection vs IEnumerable 的选择

我特意翻了早年Stack Exchange上的两个经典问题:《IEnumerable vs IReadonlyCollection vs ReadonlyCollection for exposing a list member》和《ReadOnlyCollection or IEnumerable for exposing member collections?》,其中Jon Skeet的回答特别值得参考——他建议优先用**IReadOnlyCollection**来暴露集合成员,而非IEnumerable,核心原因就是要避免那种“强制类型转换篡改集合”的危险操作。

举个例子,要是你对外暴露的是IEnumerable类型的Orders属性,就可能有人写出这种恶意代码:

ICollection<Order> evil = (ICollection<Order>)customer.Orders;
evil.Add(order3);

这种操作直接绕开了你的只读限制,偷偷修改了内部集合,完全违背了你想让集合只读的初衷。

而用IReadOnlyCollection的话,它本身就明确了“只读”的契约,既提供了Count属性方便调用方获取集合长度(不用像IEnumerable那样得遍历一遍),又从接口层面杜绝了直接修改的可能,能更好地保护你的内部数据。

内容的提问来源于stack exchange,提问作者w0051977

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:24:21