簡體   English   中英

返回List <T>的只讀包裝的哪種方式更可取?

[英]Which way of returning a readonly wrapper of List<T> is preferable?

比如,我們有一個帶有私有List的泛型類。 我們可以使它至少以兩種方式返回此列表的只讀包裝:

public class Test<T>
{
    public List<T> list = new List<T>();

    public IEnumerable<T> Values1
    {
        get
        {
            foreach (T i in list)
                yield return i;
        }
    }

    public IEnumerable<T> Values2
    {
        get
        {
            return list.AsReadOnly();
        }
    }
}

Values1Values2反映了底層集合中的任何Values1 ,並阻止它自行修改。

哪種方式更好? 應該注意什么? 或者還有其他更好的方法嗎?

如果輸出只需要IEnumerable<T> ,我更喜歡:

public IEnumerable<T> Values
{
    return this.list.AsReadOnly();
}

由於ReadOnlyCollection<T>實現了IEnumerable<T> ,因此它為您的對象提供了一個安全的包裝器,同時仍然具有靈活性和高效性,並阻止了轉換器能夠設置值。

如果您決定需要在結果中執行不同的操作,則可以隨后更改內部實現。

暫無
暫無

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

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