c# - 无法删除 arraylist 中的项目

标签 c# file-io

案例:

我正在将对象添加到我的数组列表中,在我将对象添加到我的数组列表之前,我检查它是否不存在。之后,我尝试将完整的数组列表重写到文本文件中。

代码:

WaardeObjecten obj = new WaardeObjecten(index.ToString(), allFiles[index].ToString(), values[0], values[1], values[2], values[3], values[4], values[5], values[6], values[7], values[8], values[9], values[10], values[11], values[12], values[13], values[14], values[15], values[16], values[17]);    

//Check if duplcatie
foreach (WaardeObjecten item in listOfWaardeObjecten)
{
      if (item.getIndex() == obj.getIndex())
      {
               listOfWaardeObjecten.Remove(item);
      }
}

//Add to arraylist
listOfWaardeObjecten.Add(obj);

//writedata to log file
writeLogFile();

将所有 arraylist 元素写入 .txt 文件的代码:

//Creating a streamwriter to write to the file with the path of logFileName.
using (FileStream fs = new FileStream(logFileName, FileMode.Truncate, FileAccess.Write))
using (var sw = new StreamWriter(fs))
{
      foreach (WaardeObjecten item in listOfWaardeObjecten)
      {
           sw.WriteLine(item.getTotalString());
      }
}

现在我收到以下错误:

"An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll."

"Additional Information: The collection has been changed. The inventory operation may not be performed."

更新

我现在用来删除重复项的代码:

//Check if duplcatie
for (int i = listOfWaardeObjecten.Count - 1; i >= 0; i--)
{
     if (i == obj.getIndex())
     {
           listOfWaardeObjecten.RemoveAt(i);
     }
}

//Add to arraylist
listOfWaardeObjecten.Add(obj);

//writedata to log file
writeLogFile();

我用来编写文本文件的代码:

//Creating a streamwriter to write to the file with the path of logFileName.
using (FileStream fs = new FileStream(logFileName, FileMode.Truncate, FileAccess.Write))
using (var sw = new StreamWriter(fs))
{
     foreach (WaardeObjecten item in listOfWaardeObjecten)
     {
          sw.WriteLine(item.getTotalString());
     }
}

如果我先用所有不同的值制作 10-15 张图像,然后倒回第一张图像并将所有值都放在“N.v.t.”上,则输出:

 2. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\A-1101-OSBL\99_History\fotos\A 1101 laadarm04.JPG : Discipline: Preset1 | Soort: Preset1 | Afdruk: Preset1 | Test1: Preset1 | Test2: Preset1 | Test3: Preset1 | Test4: Preset1 | Test5: Preset1 | Test6: Preset1.
 4. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\A-1101-OSBL\99_History\fotos\A 1101 laadarm06.JPG : Discipline: Preset1 | Soort: Preset1 | Afdruk: Preset1 | Test1: Preset1 | Test2: Preset1 | Test3: Preset1 | Test4: Preset1 | Test5: Preset1 | Test6: Preset1.
 6. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\A-1101-OSBL\99_History\fotos\A 1101 laadarm08.JPG : Discipline: Preset1 | Soort: Preset1 | Afdruk: Preset1 | Test1: Preset1 | Test2: Preset1 | Test3: Preset1 | Test4: Preset1 | Test5: Preset1 | Test6: Preset1.
 8. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\A-1101-OSBL\99_History\fotos\Detail tbv blisemafleiding A-1101.jpg : Discipline: Preset1 | Soort: Preset1 | Afdruk: Preset1 | Test1: Preset1 | Test2: Preset1 | Test3: Preset1 | Test4: Preset1 | Test5: Preset1 | Test6: Preset1.
 10. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\A-1101-OSBL\99_History\fotos\IMG-20131108-01010.jpg : Discipline: Preset1 | Soort: Preset1 | Afdruk: Preset1 | Test1: Preset1 | Test2: Preset1 | Test3: Preset1 | Test4: Preset1 | Test5: Preset1 | Test6: Preset1.
 1. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\A-1101-OSBL\99_History\fotos\A 1101 laadarm02.JPG : Discipline: N.v.t. | Soort: N.v.t. | Afdruk: N.v.t. | Test1: N.v.t. | Test2: N.v.t. | Test3: N.v.t. | Test4: N.v.t. | Test5: N.v.t. | Test6: N.v.t..
  3. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\A-1101-OSBL\99_History\fotos\A 1101 laadarm05.JPG : Discipline: N.v.t. | Soort: N.v.t. | Afdruk: N.v.t. | Test1: N.v.t. | Test2: N.v.t. | Test3: N.v.t. | Test4: N.v.t. | Test5: N.v.t. | Test6: N.v.t..
  5. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\A-1101-OSBL\99_History\fotos\A 1101 laadarm07.JPG : Discipline: N.v.t. | Soort: N.v.t. | Afdruk: N.v.t. | Test1: N.v.t. | Test2: N.v.t. | Test3: N.v.t. | Test4: N.v.t. | Test5: N.v.t. | Test6: N.v.t..
  7. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\A-1101-OSBL\99_History\fotos\beschadigde isolatie.jpg : Discipline: N.v.t. | Soort: N.v.t. | Afdruk: N.v.t. | Test1: N.v.t. | Test2: N.v.t. | Test3: N.v.t. | Test4: N.v.t. | Test5: N.v.t. | Test6: N.v.t..
  9. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\A-1101-OSBL\99_History\fotos\Foto tbv bliksemafleiding 1.jpg : Discipline: N.v.t. | Soort: N.v.t. | Afdruk: N.v.t. | Test1: N.v.t. | Test2: N.v.t. | Test3: N.v.t. | Test4: N.v.t. | Test5: N.v.t. | Test6: N.v.t..
  11. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\C-1106-final\99_History\Inspecties\DSC00864.JPG : Discipline: N.v.t. | Soort: N.v.t. | Afdruk: N.v.t. | Test1: N.v.t. | Test2: N.v.t. | Test3: N.v.t. | Test4: N.v.t. | Test5: N.v.t. | Test6: N.v.t..
  12. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\C-1107-fnal\99_History\Inspecties\DSC00864.JPG : Discipline: N.v.t. | Soort: N.v.t. | Afdruk: N.v.t. | Test1: N.v.t. | Test2: N.v.t. | Test3: N.v.t. | Test4: N.v.t. | Test5: N.v.t. | Test6: N.v.t..
  13. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\H-1104-final\99_History\Inspecties\100_0671.JPG : Discipline: N.v.t. | Soort: N.v.t. | Afdruk: N.v.t. | Test1: N.v.t. | Test2: N.v.t. | Test3: N.v.t. | Test4: N.v.t. | Test5: N.v.t. | Test6: N.v.t..
  14. C:\Users\Gebruiker\Desktop\MCA JPG2\05_Mechanical\01_Equipment\1100-final\P-1111-final\99_History\Onderhouds rapportages\2014 wk50  div schades\P-1111 eerste schadepomp  2.JPG : Discipline: N.v.t. | Soort: N.v.t. | Afdruk: N.v.t. | Test1: N.v.t. | Test2: N.v.t. | Test3: N.v.t. | Test4: N.v.t. | Test5: N.v.t. | Test6: N.v.t..

如您所见,并非所有值都是对“N.v.t.”的更新。

希望大家帮忙!

最佳答案

在集合上使用 foreach 循环时,您不能修改/删除集合中的项目。但是,如果您想从集合中删除项目,请改用 for 循环。

for (int i = listOfWaardeObjecten.Count-1; i >= 0; i--)
{
   if (i == obj.getIndex())
      {
         listOfWaardeObjecten.RemoveAt(i);
      }
}

如果您不想使用 for 循环,则可以使用 break 语句和 foreach 循环。 See here .

关于c# - 无法删除 arraylist 中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46909104/

相关文章:

c++ - 如何使用具有多个选项的 boost::program_options 通知程序?

.net - GetLastWriteTime 不准确

c# - 在字典中的数组内循环

c# - 有没有办法知道来电者的程序名称?

c# - Itextsharp : Adjust 2 elements on exactly one page

java - 文件打开问题

javascript - 在本地保存使用 JavaScript 生成的加密文件

c# - 如何使用 C# 调整动画 gif 文件的大小?

c# - 表单数据电子邮件

c# - 锁定文件以进行写入/删除,同时允许任何进程读取