在这个foreach循环中是否创建了垃圾?

Sko*_*der 4 c# foreach garbage-collection memory-management list

我遇到了一种方法来改变foreach循环中的列表,方法是转换为自己的列表,如下所示:

foreach (var item in myList.ToList())
{
     //add or remove items from myList
}
Run Code Online (Sandbox Code Playgroud)

(如果您尝试myList直接修改,则抛出错误,因为枚举器基本上将其锁定)

这是有效的,因为它不是原始myList的被修改.我的问题是,这个方法是否garbage在循环结束时创建(即从方法List返回的那个ToList?对于小循环,是否最好使用a for loop来避免创建垃圾?

Ant*_*ram 5

第二个列表将是垃圾,将有一个用于构建第二个列表的枚举器的垃圾,并在枚举器中添加foreach将产生的,你可能有或没有第二个列表.

你应该切换到for?也许,如果你能指出这个代码区域是一个真正的性能瓶颈.否则,代码简化和可维护性.