從我所知道的來看,.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