c# - IEnumerable 给出错误异常处理无法读取列表
问题描述
我希望代码显示有多少辆货车以及每辆货车中有哪些动物。这是我的错误:
System.InvalidOperationException: "The collection has been changed. The inventory processing may not be performed. "
这是代码:
public IEnumerable<Animal> GetAnimals()
{
return Animals.AsEnumerable();
}
public void Checker(List<Animal> listAnimals)
{
foreach (Animal animal in listAnimals)
{
foreach (Wagon wagon in Wagons)
{
foreach (Animal wagonAnimal in wagon.GetAnimals())
{
if (wagon.StartCapacity <= wagon.MaxCapacity &&
animal.Formaat + wagon.StartCapacity <= wagon.MaxCapacity &&
wagonAnimal.Eater == Eater.carnivoor &&
animal.Eater == Eater.herbivoor &&
animal.Formaat >= wagonAnimal.Formaat)
{
wagon.AddAnimal(animal);
Wagons.Add(wagon);
}
else
{
Wagon waggi = new Wagon();
waggi.AddAnimal(animal);
Wagons.Add(waggi);
}
}
}
Wagon wag = new Wagon();
wag.AddAnimal(animal);
Wagons.Add(wag);
}
}
谁能给我一些关于这个问题的提示?
解决方案
如果您希望在循环时修改集合,我会使用List
对象而不是IEnumerable
.
一些示例代码如下所示:
List<Wagons> Wagons = new List<Wagons>
Wagons.AddAnimal(animal1);
foreach(Animal animal in Wagons.GetAnimals(){
animal.Eater = Eater.herbivore;
}
还要查看您的代码:
if (wagon.StartCapacity <= wagon.MaxCapacity &&
animal.Formaat + wagon.StartCapacity <=
wagon.MaxCapacity && wagonAnimal.Eater == Eater.carnivoor &&
animal.Eater == Eater.herbivoor && animal.Formaat >= wagonAnimal.Formaat)
{
wagon.AddAnimal(animal);
Wagons.Add(wagon);
} else {
wagon.AddAnimal(animal);
Wagons.Add(wagon);
}
这个 if/else 语句执行完全相同的代码,因此您真的不需要 if/else,您只需添加动物并添加马车。
最后,您的方法的参数是否不应该接受货车而不是动物的List
集合IEnumerable
,以便您可以循环浏览货车并查看货车中的动物?
推荐阅读
- java - 杰克逊循环依赖只是通过深度而不是通过深度和广度
- matlab - 在 Matlab 中为每个点分配它最近的中心
- nvidia - D3D11 - 如何处理 SLI 和 Nvidia Surround?
- python - Amazon Linux 中的 Airflow initdb 失败
- python - 如果在创建 df pandas python usecols 时不存在,则跳过列
- node.js - 使用 PM2 运行自定义脚本
- android - 已解决:GL 上下文在 MotionEvent 之后不会创建任何新的 GL 对象
- node.js - Kafka(kafka-node)消费者组接收来自所有分区的消息
- css - 求解三个滑块的列之间的空间 (DIVI)
- fortran - 在单独的文件中构造 Fortran 派生类型