要通过一个foreach当它可以得到修改? [英] Going Through A Foreach When It Can Get Modified?

查看:138
本文介绍了要通过一个foreach当它可以得到修改?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想做一个foreach循环而采取出foreach循环的成员,但是这引发错误。我唯一的想法就是创建这个循环中另一个列表中查找这片取下,并依次通过新的列表中删除从比萨项目。

 的foreach(在比萨VAR快讯)
{
如果(Slice.Flavor ==香肠)
{
Me.Eat(快讯); //这将删除列表中的项目:比萨
}
}


解决方案

您可以做到这一点,到目前为止我发现最简单的方法(如想我发明了它,肯定是不正确的,虽然;))

 的foreach(在Pizza.ToArray VAR切片())
{
如果(Slice.Flavor ==香肠)//每至自己..会去了烧烤
{
Me.Eat(快讯);
}
}



..因为它是迭代的固定副本循环。它会遍历所有的项目,即使他们被删除。



汉迪是不是!



(通过球员的方式,这是通过集合的副本迭代,用线程安全,除去时间的一种方便的方法的对象被锁定:锁定,获得ToArray的()复制,释放锁,然后遍历)



希望帮助!


I want to do a foreach loop while taking out members of that foreach loop, but that's throwing errors. My only idea is to create another list inside of this loop to find which Slices to remove, and loop through the new list to remove items from Pizza.

foreach(var Slice in Pizza)
{
    if(Slice.Flavor == "Sausage")
    {
        Me.Eat(Slice); //This removes an item from the list: "Pizza"
    }
}

解决方案

You can do this, by far the simplest way I have found (like to think I invented it, sure that's not true though ;))

foreach (var Slice in Pizza.ToArray())
{
    if (Slice.Flavor == "Sausage") // each to their own.. would have gone for BBQ
    {
        Me.Eat(Slice);
    }
}

..because it's iterating over a fixed copy of the loop. It will iterate all items, even if they are removed.

Handy isn't it!

(By the way guys, this is a handy way of iterating through a copy of a collection, with thread safety, and removing the time an object is locked: Lock, get the ToArray() copy, release the lock, then iterate)

Hope that helps!

这篇关于要通过一个foreach当它可以得到修改?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆