如何从数组中删除元素

Cod*_*r 2 2 c# arrays .net-2.0

嗨,我正在研究一些遗留代码

for(int i = results.Count-1; i >= 0; i--)
{
  if(someCondition)
  {
     results.Remove(results[i]);
  }
}
Run Code Online (Sandbox Code Playgroud)

对我来说,在迭代循环的同时删除元素似乎是不好的做法,因为你将修改索引.

这是正确的假设吗?

有没有更好的方法呢?我想使用LINQ,但我在2.0 Framework中

Bro*_*ass 12

删除实际上是正确的,因为您将向下归零,只有您已经传递的索引才会被修改.这段代码实际上会因为另一个原因而中断:它开始于results.Count,但应该results.Count -1从数组索引从0开始.

for(int i = results.Count-1; i >= 0; i--)
{
  if(someCondition)
  {
     results.RemoveAt(i);
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

正如所指出的那样 - 你实际上必须处理伪代码中的某种List.在这种情况下,它们在概念上是相同的(因为列表在内部使用数组),但如果使用数组,则您具有Length属性(而不是Count属性),并且您无法添加或删除项.

使用列表上面的解决方案当然简洁,但对于必须维护代码的人来说可能并不容易理解(即特别是向后遍历列表) - 另一种解决方案可能是首先识别要删除的项目,然后在第二次删除那些项目.

只需替换MyType您正在处理的实际类型:

List<MyType> removeItems = new List<MyType>();

foreach(MyType item in results)
{
   if(someCondition)
   {
        removeItems.Add(item);
   }
}

foreach (MyType item in removeItems)
    results.Remove(item);
Run Code Online (Sandbox Code Playgroud)