C# · 12月 30, 2021

c# – 如何返回集合的只读副本

我有一个类包含一个集合.我想提供一个返回集合内容的方法或属性.如果调用类可以修改单个对象,但是我不希望它们从实际集合中添加或删除对象,那么可以.我已经把所有的对象复制到一个新的列表中,但是现在我想我可以把列表作为IEnumerable<>返回.

在下面的简化示例中,GetListC是返回集合的只读版本的最佳方式?

public class MyClass{ private List<string> mylist; public MyClass() { mylist = new List<string>(); } public void Add(string toAdd) { mylist.Add(toAdd); } //Returns the list directly public List<String> GetListA { get { return mylist; } } //returns a copy of the list public List<String> GetListB { get { List<string> returnList = new List<string>(); foreach (string st in this.mylist) { returnList.Add(st); } return returnList; } } //Returns the list as IEnumerable public IEnumerable<string> GetListC { get { return this.mylist.AsEnumerable<String>(); } }}解决方法 您可以使用 List(T).AsReadOnly(): return this.mylist.AsReadOnly()

这将返回ReadOnlyCollection.