C#List.Remove(object);

时间:2013-08-07 03:53:21

标签: c# xna

我正在尝试从列表中删除一个对象但它似乎没有工作。

在这种情况下,我有一个名为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);

fallingShape碰巧在索引1处。但是,当我执行.Remove时,它会删除索引0处的对象。

如何解决此问题?

2 个答案:

答案 0 :(得分:4)

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

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

这里比较了坠落形状和形状的参考。现在,坠落的形状和形状都有可能具有相同的列数但具有不同的对象。在这种情况下,添加它只是不添加它。

答案 1 :(得分:1)

尝试以下

 shapesInSameColumn.RemoveAll(s => somecondition);

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

shapesInSameColumn.RemoveAll(s => s.ID ==1);