.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索引器属性。