从我所知道的来看,.NET 4.0仍然缺少只读列表。为什么框架仍然缺乏这种功能?这不是domain-driven design最常见的功能之一吗?.NET 4.0中的只读列表或不可修改列表
Java对C#有几个优势之一就是Collections.unmodifiablelist(list)方法的形式,它似乎早就在IList < T>或List < T>中。
使用IEnumerable<T>
是最简单的问题解决方案 - ToList
可以使用并返回副本。
从我所知道的来看,.NET 4.0仍然缺少只读列表。为什么框架仍然缺乏这种功能?这不是domain-driven design最常见的功能之一吗?.NET 4.0中的只读列表或不可修改列表
Java对C#有几个优势之一就是Collections.unmodifiablelist(list)方法的形式,它似乎早就在IList < T>或List < T>中。
使用IEnumerable<T>
是最简单的问题解决方案 - ToList
可以使用并返回副本。
您正在寻找自.NET2以来一直存在的ReadOnlyCollection
。
IList<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = new ReadOnlyCollection<string>(foo);
或
List<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = foo.AsReadOnly();
这就产生了一个只读视图,这反映给被包装的集合所做的更改。
我现在问这个问题有点愚蠢 - 不知道ReadOnlyCollection – 2009-06-12 08:56:03
不是 - 我也没有,当我去找同样的东西,发现你的问题 – 2011-02-21 11:33:32
在2.0中,您可以调用AsReadOnly来获取列表的只读版本。或者将一个现有的IList包装在ReadOnlyCollection对象中。
这就是Collections.unmodifiablelist(list)的等价物 – 2009-06-12 10:49:08
我错过了.NET 4,因为我使用的是IList
ReadOnlyCollection如何在框架内?
如果列表最常见的模式是遍历所有元素,IEnumerable或IQueryable也可以有效地充当只读列表。
对于喜欢使用接口的人: .NET 4.5增加了通用的IReadOnlyList
接口,例如由List<T>
实现。
它与IReadOnlyCollection
类似,并添加了Item
索引器属性。
似乎有一个真正的只读`列表`唯一真正的方法是写你自己的,没有内置的类,我知道,支持所有的“只读”功能列表`像Contains一样,LINQ查询等。 –
jrh
2017-08-17 12:37:31