说我有:
class foo
{
private List<T> bar;
public IEnumerable<T> GetBar();
}
Run Code Online (Sandbox Code Playgroud)
哪里GetBar()应该返回那个相同的List,而不暴露内部(即没有其他类应该能够从内部列表中删除元素,重新排序等)并避免过度复制.这样做的标准方法是什么?
如果要返回不可变列表,请返回bar.AsReadOnly().
通常,公开此只读包装器的成员将是类型IList<T>.IEnumerable<T>如果我想向消费者表明实现可能使用延迟枚举,我只会低估.
我个人认为它是一个属性,并在每次调用时返回相同的只读包装:
class Foo
{
private List<T> bar;
private IList<T> readonlyBar;
public Foo()
{
bar = ...;
readonlyBar = bar.AsReadOnly();
}
public IList<T> Bar
{
get { return readonlyBar; }
}
}
Run Code Online (Sandbox Code Playgroud)
您可以从方法返回ReadOnlyCollection的实例:
return new ReadOnlyCollection(items);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |