据我所知,.NET 4.0仍然缺少只读列表。为什么框架仍然缺少此功能?这不是领域驱动设计最常见的功能之一吗?
Java与C#相比具有的少数优点之一是以Collections.unmodifiablelist(list)的形式呈现的方法,在IList <T>或List <T>中似乎早该这样做了。
使用IEnumerable<T>
是解决问题的最简单方法- ToList
可以使用并返回副本。
据我所知,.NET 4.0仍然缺少只读列表。为什么框架仍然缺少此功能?这不是领域驱动设计最常见的功能之一吗?
Java与C#相比具有的少数优点之一是以Collections.unmodifiablelist(list)的形式呈现的方法,在IList <T>或List <T>中似乎早该这样做了。
使用IEnumerable<T>
是解决问题的最简单方法- ToList
可以使用并返回副本。
Answers:
您正在寻找的ReadOnlyCollection
,.NET2以来一直存在。
IList<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = new ReadOnlyCollection<string>(foo);
要么
List<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = foo.AsReadOnly();
这将创建一个只读视图,该视图反映对包装的集合所做的更改。
对于那些喜欢使用接口的人:.NET 4.5添加了通用IReadOnlyList
接口,该接口List<T>
例如由实现。
它类似于IReadOnlyCollection
并添加了Item
索引器属性。
框架中已有ReadOnlyCollection怎么样?
在2.0中,您可以调用AsReadOnly
获取列表的只读版本。或将现有对象包装IList
在ReadOnlyCollection<T>
对象中。
List<T>
是编写自己的只读文件,据我所知,没有内置的类支持List<T>
开箱即用的所有“只读”功能,如Contains
LINQ查询等。