c#,集合已修改,枚举无法进行

public bool removeBuffOfType(short type, bool ingame = false)
{

Grid chrGrid = this.owner.getGrid();
Area chrArea = this.owner.getArea();
if (chrGrid == null || chrArea == null) return false;
bool removedBuff = false;
Dictionary<byte, Buff> _buffs = new Dictionary<byte, Buff> (buffs);
foreach (KeyValuePair<byte, Buff> indexedBuff in _buffs)
if (indexedBuff.Value.getID() == type)
{
buffs.Remove(indexedBuff.Key);
if (ingame)
{
chrGrid.sendTo3x3Area(chrArea, SkillPackets.getBuffEffectOnCharacter(this.owner, indexedBuff.Key, 0, 0, 0, true));
removedBuff = true;
}
}

if (removedBuff)
{
MHFunctions.calculateCharacterStatistics(this.owner);
}

return removedBuff;

}

第1个回答  2016-11-23

if (chrGrid == null || chrArea == null) return false;
List<byte> list=new List<int>(buffs.Keys);
foreach(byte bt list)
if(buffs[bt].Value.GetID()==type)
{
}

本回答被网友采纳
第2个回答  2016-11-23
把foreach改成for

怎么回事儿?C#错误:集合已修改;枚举操作可能无法执行。
集合已修改;枚举操作可能无法执行。{if (dr["主键"].ToString() == ""){ dt.Rows.Remove(dr);}}以查阅MSDN这个c#出错的原因是:foreach语句用于循环遍历集合以获取所需信息,但不能更改正在遍历的集合内容。可以用foreach遍历dt.Rows这个 ...

c#,集合已修改,枚举无法进行
if (chrGrid == null || chrArea == null) return false;List<byte> list=new List<int>(buffs.Keys);foreach(byte bt list)if(buffs[bt].Value.GetID()==type){}

关于c#“集合已修改;可能无法执行枚举操作”错误
使用foreach不能执行删除、修改,这是规定。你可以使用for循环遍历修改。如果你是删除的话,for循环 i 要从大到小,比如:for(int i=50;i>=0;i--){}而不是 for(int i=0;i<=50;i++){}

C#集合已修改,可能无法执行枚举操作
dt.Remove(id);MessageBox.show('...');} 或者你直接在MessageBox.show(''');加一个break;

集合已修改;枚举操作可能不会执行。
与Java中的switch不同,C#的switch语句要求每一个case块或者在块的末尾提供一个break语句,或者用goto转到switch内的其他case标签。2.5、foreach语句 foreach语句枚举集合中的各个元素,为集合中的每一个元素执行一次代码块。请参见下面的例子。using System;public class Hello {public static void Main(String[] args...

...InvalidOperationException: 集合已修改;可能无法执行枚举...
你在对列表枚举的过程中改变了列表中的数量。

C# 使用定时器和Dictionary 出现异常说集合已修改,可能无法执行枚举操 ...
有可能是多线程引起冲突,解决办法是使用线程安全的字典 ConcurrentDictionary<TKey, TValue> 类 http:\/\/msdn.microsoft.com\/zh-cn\/library\/dd287191.aspx 另外在foreach里面不能再修改foreach的list,这是常识,你可以先克隆一个list来遍历。

C# 集合已修改,枚举操作可能无法执行
longspeed2.Clear();\/\/是这句出的问题,跟foreach无关吧

集合已修改;可能无法执行枚举操作。
可以遍历 Hashtable ht = new Hashtable();foreach (DictionaryEntry entry in ht){ } 是foreach遍历的时候不能修改 用for(int i=ht.Count-1;i>=0;i--)这种方式可以一边遍历,一边修改,要注意的是如果修改集合的话,ht.Count是会变化的,所以for(int i=0;i<ht.Count;i--)这种方式时的i...

急 集合已修改;可能无法执行枚举操作
如果是循环内部对集合的元素执行了删除、添加操作,就出现这种错误。不知“ads.DelAdmin(Admin_id);”这个是什么方法,如果是this.dlInfo.Items的删除操作,肯定是不行的。

相似回答