c# - 一个对象从它所在的列表中删除自己的潜在危险是什么?

标签 c#

例如,如果我有一个类:

public class StuffHolder
{

    List<Stuff> myList;

    public StuffHolder()
    {
        myList = newList<Stuff>();
        myList.Add(new Stuff(myList));
        myList[0].stuffHappens();
    }

}

和一个 Stuff 对象:

public class Stuff
{
    List<Stuff> myList;

    public Stuff(List<Stuff> myList)
    {
        this.myList = myList;
    }

    public void stuffHappens()
    {
        myList.Remove(this);
    }
}

调用 stuffHappens() 而不是让 stuff 将应删除的信息传递给 StuffHolder 类并让 StuffHolder 类删除该特定 Stuff 的缺点是什么?

最佳答案

如果 stuffHappens() 一次出现在多个线程中,就会有危险,因为 List<T>集合不是线程安全的。

更大的危险是责任的混淆,因为 Stuff 的工作可能不应该知道它被存储在一个集合中。随着系统的成长和发展,这种设计“模糊性”会导致越来越多的困惑。

关于c# - 一个对象从它所在的列表中删除自己的潜在危险是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11302766/

相关文章:

c# - 是否可以沙盒化并运行在浏览器的文本字段中输入的 C++ 或 C# 代码?

c# - .NET 后台线程如何检测到主应用程序正在关闭?

c# - 当 "User must change password on next log on"时,LDAP 验证失败。有什么解决办法吗?

c# - 在 C# 中等待后台线程完成处理的最佳方法

c# - [Linux | Cscore]avutil-55 DllNotFoundException

c# - 在 .NET/C# 上下文中,什么是二分搜索以及如何/为什么使用二分搜索?

c# - 使用 ref 参数模拟方法的语法

c# - 使用列表从数据库接收行

c# - Resharper 要我实现一个在 WPF 生成的代码中实现的接口(interface)成员

c# - 是否可以为另一个 ui 元素调用我的 listview 元素?