c# - 禁止对 List<T> 公开添加和删除

标签 c# list

在我的 C# 项目中,我有一个包含列表的类

public class MyClass
{
  public MyClass parent;
  public List<MyClass> children;
  ...
}

我想阻止类的用户向子列表添加(和删除)一个元​​素,但他仍然能够解析它的元素。我想处理 MyClass 中的添加和删除,提供 AddChild(MyClass item) 和 DeleteChild(MyClass item) 以确保在将项目添加到子列表时,将正确设置该项目的父项。

除了实现我自己的 IList 之外,你知道如何做到这一点吗?

提前致谢, 弗兰克

最佳答案

如果您将 List<T> 交给来电者,你无法控制这个;你甚至不能继承 List<T> ,因为添加/删除不是 virtual .

相反,我会将数据公开为 IEnumerable<MyClass> :

private readonly List<MyClass> children = new List<MyClass>();
public void AddChild(MyClass child) {...}
public void RemoveChild(MyClass child) {...}
public IEnumerable<MyClass> Children {
    get {
        foreach(var child in children) yield return child;
    }
}

(yield return 阻止他们只是施放它)

来电者仍然可以使用foreach.Children ,感谢 LINQ,他们也可以做所有其他有趣的事情( WhereFirst 等)。

关于c# - 禁止对 List<T> 公开添加和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3052991/

相关文章:

C#:在运行时生成的 List<T> 上调用 ForEach

C# SQL 存储过程(插入) - 传递参数和检索参数

database - 你如何从Android中的sqlite数据库中制作多项选择列表?

list - 在 clojure 中 - 如何一一使用列表元素?

c# - 使用 C# 读取 azure ServiceConfiguration 文件的证书部分

c# - ReplaySubject.First() 意外阻塞

c# - 动态创建 C# 类的实例

java - 为什么整数的自动装箱和拆箱不适用于 Java 中的 Arrays.asList?

python - Scrapy看不到列表

c# - 如果删除元素,List<T> 会缩小大小