.NET 4.0中的只读列表或不可修改的列表
据我所知,.NET 4.0仍然缺less只读列表。 为什么框架仍然缺乏这种function? 这不是这个领域驱动devise最常见的function之一吗?
Java相对于C#来说less有的优势之一就是Collections.unmodifiablelist(list)方法的forms,它在IList <T>或List <T>中看起来已经过时了很久。
使用IEnumerable<T>
是问题的最简单的解决scheme – ToList
可以使用并返回一个副本。
你正在寻找ReadOnlyCollection
,它自.NET2以来就一直存在。
IList<string> foo = ...; // ... ReadOnlyCollection<string> bar = new ReadOnlyCollection<string>(foo);
要么
List<string> foo = ...; // ... ReadOnlyCollection<string> bar = foo.AsReadOnly();
这将创build一个只读视图 ,该视图反映对包装的集合所做的更改。
ReadOnlyCollection如何已经在框架内?
如果列表最常见的模式是遍历所有元素,IEnumerable或IQueryable也可以有效地作为只读列表。
在2.0中,您可以调用AsReadOnly来获取列表的只读版本。 或者将一个现有的IList包装在ReadOnlyCollection对象中。
什么问题System.Collections.ObjectModel.ReadOnlyCollection ?
对于那些喜欢使用接口的人来说,.NET 4.5增加了通过List<T>
实现的通用IReadOnlyList
接口。
它类似于IReadOnlyCollection
并添加一个Item
索引器属性。