防止其他类更改类中的列表

时间:2010-01-28 21:36:47

标签: c#

如果我有一个包含例如List< string>的类。我希望其他类能够看到列表但不能设置它,我可以声明

public class SomeClass()
{
    public List<string> SomeList { get; }
}

这将允许另一个类访问SomeList而不设置它。

但是,虽然调用类不能设置列表,但它可以添加或删除元素。我该如何预防呢?我想我可以使用一个字段并返回List的副本而不是使用属性,但这感觉不对。

(这应该很简单但我必须遗漏一些东西......)

4 个答案:

答案 0 :(得分:14)

您将无法使用autoproperty。

public class SomeClass()
{
    private List<string> someList;
    public IList<string> SomeList { 
        get { return someList.AsReadOnly(); }
    }
}

答案 1 :(得分:4)

您希望将列表作为ReadOnly list返回。您可以使用以下代码执行此操作:

using System.Collections.ObjectModel;

public ReadOnlyCollection<string> GetList() {
    return SomeList.AsReadOnly();
}

答案 2 :(得分:2)

返回IEnumerable<string>,这是不可变的。吸气剂应如下所示:

public IEnumerable<string> SomeList
{
   get
   {
      foreach(string s in someList) yield return s; // excuse my inline style here, zealots
      yield break;
   }
}

答案 3 :(得分:0)

public class SomeClass()
{
    private List<string> _someList = new List<string>();

    public IList<string> SomeList 
    { 
         get { return _someList.AsReadOnly(); } 
    }
}