对象从列表中删除的潜在危险是什么?

use*_*479 1 c#

例如,如果我有一个班级:

public class StuffHolder
{

    List<Stuff> myList;

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

}
Run Code Online (Sandbox Code Playgroud)

和一个东西对象:

public class Stuff
{
    List<Stuff> myList;

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

    public void stuffHappens()
    {
        myList.Remove(this);
    }
}
Run Code Online (Sandbox Code Playgroud)

调用stuffHappens()而不是让东西传递应该删除的信息到StuffHolder类并让StuffHolder类删除那个特定的Stuff有什么缺点?

Dan*_*ant 5

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

更大的危险是责任的混乱,因为它可能不应该是Stuff的工作,以了解它存储在一个集合中.随着系统的发展和演变,这种设计"模糊"导致混乱不断增加.