我要转换的项目进入到一个字符串列表:如何转换列表<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