如何转换列表ReadOnlyCollection< string>在c#

本文关键字:string ReadOnlyCollection 列表 何转换 转换 | 更新日期: 2023-09-27 18:14:58

我想将输入到字符串列表中的项转换为:

System.Collections.ObjectModel.ReadOnlyCollection<string>

我试过使用:

(System.Collections.ObjectModel.ReadOnlyCollection<string>)listname

但是它返回一个错误

如何转换列表<string>ReadOnlyCollection< string>在c#

您可以使用构造函数中已有的List创建一个新实例。

var readOnlyList = new ReadOnlyCollection<string>(existingList);

ReadOnlyCollection(Of T) MSDN上的构造函数

如果你有:

List<string> names=new List<string>(){"Rod", "Jane", "Freddy"};

那么你可以说:

ReadOnlyCollection<string> readOnlyNames=names.AsReadOnly();

这不会复制列表。相反,只读集合存储对原始列表的引用,并禁止对其进行更改。但是,如果您通过names修改底层列表,那么readOnlyNames也会发生变化,因此如果可以,最好放弃可写实例。

ReadOnlyCollection的构造函数接受一个list

这里有一些参考http://msdn.microsoft.com/en-us/library/ms132476.aspx

var myreadonlycollection = new ReadOnlyCollection<string>(listname);
var readonlyCollection = new ReadOnlyCollection<string>(list);

其他答案是正确的,因为您需要将IList<T>传递给ReadOnlyCollection<T>的构造函数。

我发现在IEnumerable<T>上有一个扩展方法很有用,它有助于ReadOnlyCollection<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());
}