在C#中,一个方法可以返回List,这样客户端只能读取它,而不能写入它吗?

zum*_*ard 6 c# encapsulation const readonly immutability

假设我有一个C#类:

class Foo
{
    private List<Bar> _barList;
    List<Bar> GetBarList() { return _barList; }
...
}
Run Code Online (Sandbox Code Playgroud)

客户可以调用它:

var barList = foo.GetBarList();
barList.Add( ... );
Run Code Online (Sandbox Code Playgroud)

有没有办法让Add方法失败,因为只_barList返回只读版本?

Jay*_*ggs 16

是的,作为GetBarList() 回报_barList.AsReadOnly().

编辑:
正如迈克尔在下面指出的那样,你的方法必须返回一个IList<Bar>.

  • 太好了!请注意,由于这会返回实现IList的ReadOnlyCollection,因此访问者还必须返回IList,而不是List. (2认同)