List<T>
工具 IReadOnlyCollection<T>
接口(interface)并提供AsReadOnly()
返回 ReadOnlyCollection<T>
的方法(它又实现了 IReadOnlyCollection<T>
)。
AsReadyOnly()
的用途/原因是什么? ?它的存在有一种或两种极端情况的味道,其中只是将列表返回为 IReadOnlyCollection<T>
。只是不够好。
起初我认为这可能是为了防止放弃成本,但看起来你可以用 ReadOnlyCollection<T>
做到这一点的 Items
访问器(accessor)。
顺便说一句。 ReadOnlyCollection<T>
的文档类型阅读
Provides the base class for a generic read-only collection.
在我看来,这与将构造函数描述为
相冲突Initializes a new instance of the (...) class that is a read-only wrapper around the specified list.
更新:
我没看到 ReadOnlyCollection<T>
的 Items
受到保护。
最佳答案
如果你只是返回一个实际的 List<T>
作为IReadOnlyList<T>
,那么调用者总是可以将其转换回去,然后根据需要修改列表。相反,调用 AsReadOnly()
创建列表的只读包装器,消费者无法更新。
请注意,只读包装器将反射(reflect)对基础列表所做的更改,因此可以访问原始列表的代码仍然可以在知道只读版本的任何消费者都将看到这些更改的情况下更新它。
关于c# - List<T>.AsReadOnly() 与 IReadOnlyCollection<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17398428/