c# - 最佳实践 : How to expose a read-only ICollection

标签 c# collections c#-2.0

我有一个 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/

相关文章:

c# - 显式空检查与空合并运算符的编译器评估?

java - 从对象集合中测试集合属性的内容

c# - 静态只读字段初始化程序与静态构造函数初始化

c# - 数千个并发数据包,ThreadPool vs BeginRead?

c# - Entity Framework 7 IDENTITY_INSERT

java - 通过fxml添加observableHashMap

visual-studio-2012 - 找不到类型或命名空间

c# - ASP.NET 2.0 中的静态类变量行为?

c# - JSON.net 的新手,示例代码

c# - 将数据保存在内存中