在C#中的foreach语句中保持流是指在遍历集合或数组时,可以在循环体内对集合或数组进行修改而不会引发异常。在传统的foreach循环中,如果在循环体内对集合或数组进行添加、删除或修改操作,会导致集合被修改,从而引发“集合已修改,无法执行枚举操作”的异常。
为了解决这个问题,可以使用LINQ(Language Integrated Query)中的ToList()方法或ToArray()方法将集合或数组转换为新的列表或数组,然后在foreach循环中遍历新的列表或数组。这样做的好处是,在循环体内对原始集合或数组进行修改不会影响到foreach循环的遍历过程。
以下是一个示例代码:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
List<int> modifiedNumbers = numbers.ToList(); // 使用ToList()方法创建新的列表
foreach (int number in modifiedNumbers)
{
if (number % 2 == 0)
{
modifiedNumbers.Remove(number); // 在循环体内对新列表进行删除操作
}
}
// 输出结果
foreach (int number in modifiedNumbers)
{
Console.WriteLine(number);
}
在上述示例中,我们使用ToList()方法创建了一个新的列表modifiedNumbers,并在循环体内对新列表进行了删除操作。由于我们遍历的是新列表,所以不会引发异常。最后输出的结果是1、3、5,即偶数被成功删除。
需要注意的是,虽然使用ToList()方法或ToArray()方法可以解决在foreach循环中保持流的问题,但在循环体内对原始集合或数组进行修改仍然是不推荐的做法。这样的修改可能会导致代码逻辑混乱,难以维护。在实际开发中,建议在foreach循环之前先对集合或数组进行必要的修改操作,然后再进行遍历。
领取专属 10元无门槛券
手把手带您无忧上云