c# - 是否有阻止添加对象的 .NET 集合接口(interface)?

标签 c# .net collections list

我有一个类维护另一个类的对象列表。对象列表是公共(public)属性。我想阻止用户直接添加和删除对象到这样的列表:

      MyObject.MyListProperty.Add(object);

相反,我希望他们使用在内部进行一些处理然后将对象添加到列表的方法。

我有一些想法:

  • 创建 List<T> 的后代并覆盖添加和删除
  • 通过属性getter返回列表的新副本(列表比较短,不超过30个对象)

有没有没有Add和Remove的集合接口(interface)?

编辑:
我要选择 ReadOnlyCollection<T> .原因是包装的集合可以更新,并且更改将在只读对象中立即可见(请参阅 ReadOnlyCollection<T> AsReadOnly() 的 MSDN 代码示例)。这允许只创建一次只读列表。

IEnumerable 的问题是那个对象可以转换回原来的 List<T>接着 直接操纵。

最佳答案

您可以使用 ReadOnlyCollection - 将您的收藏品包裹在此并返回 ReadOnlyCollection给你类(class)的用户:

return new ReadOnlyCollection(innerCollection);

或使用 AsReadOnly List<T> 的方法类:

return innerCollection.AsReadOnly();

IEnumerable界面将满足您的需求,因为它只有一个成员 GetEnumerator() ,这只会让您迭代项目。

关于c# - 是否有阻止添加对象的 .NET 集合接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2176246/

相关文章:

c# - 手动编译包含多个文件、库的完整 C# 项目

c# - 如何使用 ActionResult<T> 进行单元测试?

c# - 如何连接 xaml 和 xaml.cs 文件

c# - 在 .Net 中列出和终止进程

c# - 如何巧妙地解包异步方法的结果对象?

c# - String.Join - 参数和直接值的不同行为

c# - 如何只查找同时具有 getter 和 setter 的属性?

c# - ITypedList 替代品?

Java:如何确保可序列化的集合

java - Java中如何找到多个Map的共同部分?