加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:55:39 所属栏目:百科 来源:网络整理
导读:我有一个类包含一个集合.我想提供一个返回集合内容的方法或属性.如果调用类可以修改单个对象,但是我不希望它们从实际集合中添加或删除对象,那么可以.我已经把所有的对象复制到一个新的列表中,但是现在我想我可以把列表作为IEnumerable返回. 在下面的简化示例
我有一个类包含一个集合.我想提供一个返回集合内容的方法或属性.如果调用类可以修改单个对象,但是我不希望它们从实际集合中添加或删除对象,那么可以.我已经把所有的对象复制到一个新的列表中,但是现在我想我可以把列表作为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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读