2009-10-21 53 views
6

比方說,我有一個C#類:在C#中,方法可以返回List,以便客戶端只能讀取它,但不能寫入它?

class Foo 
{ 
    private List<Bar> _barList; 
    List<Bar> GetBarList() { return _barList; } 
... 
} 

一個客戶端可以調用它:

var barList = foo.GetBarList(); 
barList.Add(...); 

有沒有一種方法,使Add方法失敗,因爲只有_barList只讀版本回?

+0

請記住,即使無法從列表中添加或刪除對象,仍可以修改列表中的對象(設置屬性值,調用改變狀態的方法)。 – 2009-10-21 05:16:18

回答

15

是的,在GetBarList()返回_barList.AsReadOnly()

編輯:
正如邁克爾下面指出的那樣,你的方法必須返回一個IList<Bar>

+2

不錯!請注意,由於這返回實現IList的ReadOnlyCollection,您的訪問者還必須返回IList,而不是List。 – 2009-10-21 04:44:25

+0

真棒,謝謝! – zumalifeguard 2009-10-21 05:06:46

+0

邁克爾,謝謝你指出。 – 2009-10-21 05:09:07

4

您可以嘗試使用ReadOnlyCollection。或者只從你的方法返回IEnumerable,客戶端將不會有修改它的方法。

+0

前者效果更好,因爲後者可以轉換回列表 – 2011-04-07 12:54:35

相關問題