我要轉換的項目進入到一個字符串列表:如何轉換列表<string>到ReadOnlyCollection <string>在C#
System.Collections.ObjectModel.ReadOnlyCollection<string>
我已經嘗試使用:
(System.Collections.ObjectModel.ReadOnlyCollection<string>)listname
但它返回一個錯誤。
我要轉換的項目進入到一個字符串列表:如何轉換列表<string>到ReadOnlyCollection <string>在C#
System.Collections.ObjectModel.ReadOnlyCollection<string>
我已經嘗試使用:
(System.Collections.ObjectModel.ReadOnlyCollection<string>)listname
但它返回一個錯誤。
可以使用在構造函數中的現有列表創建一個新的實例。
var readOnlyList = new ReadOnlyCollection<string>(existingList);
這正是我想。謝謝大家迴應這個問題。 – techno
ReadOnlyCollection的構造函數接受一個IList
下面是一些參考http://msdn.microsoft.com/en-us/library/ms132476.aspx
var myreadonlycollection = new ReadOnlyCollection<string>(listname);
@Errorstacks ...感謝downvote。但你不應該抄襲。 –
和你一樣..但是在回答這個問題之前我沒有看到你的答案... –
@Errorstacks ....哈哈它的有趣我從來沒有說過你會抄襲我。但是您從MSDN複製了確切的代碼。只需參考鏈接並描述。 –
var readonlyCollection = new ReadOnlyCollection<string>(list);
如果你有:
List<string> names=new List<string>(){"Rod", "Jane", "Freddy"};
然後你就可以說:
ReadOnlyCollection<string> readOnlyNames=names.AsReadOnly();
這不復制該列表。相反,只讀集合存儲對原始列表的引用並禁止更改它。但是,如果您通過names
修改基礎列表,則readOnlyNames
也將更改,因此如果可以,最好放棄可寫實例。
其他答案是正確的,因爲您需要將IList<T>
傳遞給ReadOnlyCollection<T>
的構造函數。
我發現有用的是具有促進所述ReadOnlyCollection<T>
的創建上IEnumerable<T>
擴展方法:
public static ReadOnlyCollection<T> ToReadOnlyCollection<T>(
this IEnumerable<T> source)
{
if (source == null) throw new ArgumentNullException("source");
return new ReadOnlyCollection<T>(
source as IList<T> ?? source.ToList());
}
[自IList <>返回ReadOnlyCollection](的
所以你的'source.ToReadOnlyCollection()'與內置的'source.ToList()。AsReadOnly()'非常相似。 (另外,根據傳入的IEnumerable <>是否已經是IList <>',你的代碼的行爲會有所不同,如果這個源集合的未來突變將會反映在你的'ReadOnlyCollection <> ';如果不是那麼你的''ReadOnlyCollection <>'是有效的不可變的。) – LukeH
可能重複http://stackoverflow.com/questions/7227611/return-readonlycollection-from-ilist) – nawfal