据我所知,.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>开箱即用的所有“只读”功能,如ContainsLINQ查询等。