2009-10-21 61 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

相关问题