1

我正在尝试从列表中删除一个对象,但它似乎不起作用。

在这种情况下,我有一个名为的对象shape和一个名为shapes.

我尝试通过以下方式构建一个新List<Shape> shapesInSameColumn的:

List<Shape> shapesInSameColumn = new List<Shape>();

foreach (var shape in shapes)
{
   if (fallingShape.ColumnNumber == shape.ColumnNumber)
   {
      shapesInSameColumn.Add(shape);
   }
}

我现在想要做的是从上述集合中只删除一个对象。我这样做:

shapesInSameColumn.Remove(fallingShape);

fallShape 恰好位于索引 1。但是,当我执行 .Remove 时,它​​会删除索引 0 处的对象。

我该如何解决这个问题?

4

2 回答 2

4
if (fallingShape.ColumnNumber == shape.ColumnNumber &&
     !object.ReferenceEquals(fallingShape,shape))
{
  shapesInSameColumn.Add(shape);
}

而不是删除甚至不将其添加到shapesInSameColumn

这里正在比较fallingshape和shape的参考。现在,下降的形状和形状都有可能具有相同的列号但对象不同。在这种情况下,添加它,否则只是不添加它。

于 2013-08-07T04:04:44.990 回答
1

试试下面

 shapesInSameColumn.RemoveAll(s => somecondition);

例如,您需要删除 ID 等于 1 的形状

shapesInSameColumn.RemoveAll(s => s.ID ==1);
于 2013-08-07T04:01:02.520 回答