簡體   English   中英

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

[英]Prevent other classes from altering a list in a class

如果我有一個包含例如List <string>的類,並且我希望其他類能夠看到列表但是沒有設置它,我可以聲明

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

這將允許另一個類訪問SomeList而不設置它。

但是,盡管調用類無法設置列表,但它可以添加或刪除元素。 我該如何預防呢? 我想我可以使用一個字段並返回List的副本而不是使用屬性,但這感覺不對。

(這應該很簡單但我必須遺漏一些......)

您將無法使用autoproperty。

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

您將要將列表作為ReadOnly列表返回。 您可以使用以下代碼執行此操作:

using System.Collections.ObjectModel;

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

返回IEnumerable<string> ,它是不可變的。 getter應如下所示:

public IEnumerable<string> SomeList
{
   get
   {
      foreach(string s in someList) yield return s; // excuse my inline style here, zealots
      yield break;
   }
}
public class SomeClass()
{
    private List<string> _someList = new List<string>();

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM