C#List.Remove(item)故障?

DrZ*_*214 -3 c#

今天,我在C#列表中遇到了一个小故障,或者至少看起来像是我的一个,所以我想我会问.这是代码:

// in main
List<Move> LM = new List<Move>();
LM.Add(new Move(4, 7));

// in Move
public Move(int ccc, int rrr)
{
  col = ccc;
  row = rrr;

  scr_check_duplicates();
}

public void scr_check_duplicates()
{
  foreach (Move M in Main.LM)
  {
    if (M.col == col && M.row == row)
      Main.LM.Remove(this);
  }
}
Run Code Online (Sandbox Code Playgroud)

好吧猜怎么着?Remove()没有做任何事情!如果你想自己搞清楚,请继续.否则,原因如下:

在跟踪它一段时间之后,我相信这是因为在新的Move()构造函数的中间,该对象实际上还没有被添加到列表中,因为它仍在初始化.

问题是,这是故障还是C#故意这样做?在我看来,如果它只是继续添加一个新的Move,然后调用构造函数,它将工作正常,而不会破坏任何可想到的代码.有没有更好的方法来做我想要的?理想情况下,我希望能够立即删除构造函数或它调用的任何函数.

mas*_*son 5

没有故障.想想先执行什么.你的代码与此相同......

// in main
List<Move> LM = new List<Move>();
Move move=new Move(4, 7);
LM.Add(move);
Run Code Online (Sandbox Code Playgroud)

因此构造函数在项目添加到列表之前完全运行.因此,在您调用Main.LM.Remove(this);该项目的时间点尚未在LM中,因此无需删除任何内容.

此外,当您在一个遍历集合的foreach块内时,您无法在集合上调用Remove.