作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 ICollection<T>
称为 foos
在我想公开为只读的类中(参见 this question )。我看到接口(interface)定义了一个属性 .IsReadOnly
,这似乎是合适的......我的问题是:我如何让类(class)的消费者明白 foos
是只读的?
我不想依赖他们记住查询 .IsReadOnly
在尝试未实现的方法之前,例如 .Add()
.理想情况下,我想公开 foos
作为 ReadOnlyCollection<T>
, 但它没有实现 IList<T>
.我应该公开 foo
吗?通过一个名为的方法,例如 GetReadOnlyFooCollection
而不是通过属性(property)?如果是这样,这不会让那些期待 ReadOnlyCollection<T>
的人感到困惑吗? ?
这是 C# 2.0,所以像 ToList()
这样的扩展方法不可用...
最佳答案
您可以像这样将“foos”设为 ReadOnlyCollection:
ReadOnlyCollection<T> readOnlyCollection = foos.ToList<T>().AsReadOnly();
然后您可以将其公开为您的类的属性。
编辑:
class FooContainer
{
private ICollection<Foo> foos;
public ReadOnlyCollection<Foo> ReadOnlyFoos { get { return foos.ToList<Foo>().AsReadOnly();} }
}
注意:您应该记住,一旦您获得 ReadOnlyFoos 集合,就不再与您的 foos ICollection “同步”。查看thread you referenced .
关于c# - 最佳实践 : How to expose a read-only ICollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/285323/
我是一名优秀的程序员,十分优秀!