c# 多个计时器编辑同一个列表

标签 c# winforms list self-modifying

我目前有 4 个计时器向 List 添加对象但一旦他们离开 WinForms 控件,就应该将其删除。

我已经试过了:

foreach (Auto a in autoListe)
{
    if (a.X > 550 || a.X < -50 || a.Y > 550 || a.Y < -50)
    {
        autoListe.Remove(a);
    }
}

但是当 Object离开 Control 这会给出一个 Exception由于 List用于添加 Car s 同时。

所以现在我不确定如何删除 Object自从添加 Object s 需要保持不变

最佳答案

您不能在迭代时修改集合。您必须存储要删除的汽车,然后将它们从原始列表中删除。

var autosDieGeloeschtWerdenSollen = new List<Auto>();
foreach (Auto a in autoListe)
{
    if (a.X > 550 || a.X < -50 || a.Y > 550 || a.Y < -50)
    {
        autosDieGeloeschtWerdenSollen.Add(a);
    }
}
autoListe.RemoveRange(autosDieGeloeschtWerdenSollen);

如果自动列表是 List<Auto>您还可以使用以下内容:

autoListe.RemoveAll(a => a.X > 550 || a.X < -50 || a.Y > 550 || a.Y < -50);

您也可以使用向后的 for 循环,但我不建议这样做,因为它很难理解。这也仅在您的收藏是 List<Auto> 时才有效。 .

for (int i = autoListe.Count - 1; i >= 0; i--)
{
    var a = autoListe[i];

    if (a.X > 550 || a.X < -50 || a.Y > 550 || a.Y < -50)
    {
      autoListe.RemoveAt(i);
    }
}

关于c# 多个计时器编辑同一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42440564/

相关文章:

python - 从另一个列表中查找数字索引

winforms - 与 White 的集成测试

c# - 调用更改组件(标签)的父类(super class)函数

python - 我怎样才能使这个构造更简单,就像Python中的类或函数一样?

c# - .Net、C# 和开源运动

c# - 通过选择项目更改 ToolStripDropDownButton 文本

python - python 中的迭代二分搜索

c# - 根据某些条件启用和禁用按钮、标签

c# - 提高 LINQ 枚举器内条件查询的性能

c# - 在 dataGridView 中创建自定义格式字符串