108
|
Erik Öjebo · 技术社区 · 16 年前 |
![]() |
1
87
更现代的解决方案
除非需要内部集合是可变的,否则可以使用
更新答案,更直接地解决问题
这取决于您对调用代码的信任程度。如果你完全控制了所有可以称之为会员的事情, 保证 任何代码都不会使用:
当然,如果你直接归还收藏品,不会造成任何伤害。不过,我总想比这更偏执一点。
同样地,正如你所说:如果你只是
需要
原始答案 如果您使用.NET 3.5,则可以避免制作副本 和 通过使用简单调用跳过来避免简单强制转换:
(有很多其他的选择来包装琐碎的东西-关于
如果不使用.NET 3.5,则可以编写一个非常简单的包装器来执行相同的操作:
|
![]() |
2
39
如果只需要遍历集合:
然后回来 可枚举的 就够了。 如果需要随机访问项目:
然后把它包起来 读数集合 . |
![]() |
3
27
如果这样做,则没有什么可以阻止调用方将IEnumerable强制转换回ICollection,然后对其进行修改。readOnlyCollection消除了这种可能性,尽管仍然可以通过反射访问底层的可写集合。如果集合很小,那么解决此问题的一个安全而简单的方法是返回一个副本。 |
![]() |
4
3
我尽量避免使用readOnlyCollection,它实际上比使用普通列表慢得多。 请参见此示例:
|
![]() |
5
0
有时您可能希望使用接口,可能是因为您希望在单元测试期间模拟集合。请看我的 blog entry 用于使用适配器将自己的接口添加到readOnlyCollection。 |
![]() |
Sinatr · 警告-未实现“收集”模式 7 年前 |
![]() |
KDecker · 按完成时间排序任务,同时在参数列表中跟踪其索引? 8 年前 |
![]() |
Gustaf Liljegren · 如何在所有Y对象中获取所有X对象? 10 年前 |