我定义了SortedDictionary:
private SortedDictionary<int, SingleQcCalculation> m_dicTagsToCalc;
我正在迭代它并在值中设置一个属性:
foreach (KeyValuePair<int, SingleQcCalculation> pairSingleCalc in m_dicTagsToCalc)
{
try
{
pairSingleCalc.Value.m_QCtoCalc.m_CurGroupID = pairSingleCalc.Value.m_ChangedQcGroupId;
pairSingleCalc.Value.m_QCtoCalc.CalculateQCExpression(pairSingleCalc.Value.m_OPCChangeTime, pairSingleCalc.Value.m_calcTime);
}
catch (Exception ex)
{
logger.Error(LogTopicEnum.DA,"Error calculating calced QC (id=" + pairSingleCalc.Value.m_QCtoCalc.ID.ToString() + ")" , ex);
}
}
由于某种原因,我得到了这个例外:
DoQCsCalculations: error while calculating calced tags
System.InvalidOperationException: Collection was modified after the enumerator was instantiated.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.SortedSet`1.Enumerator.MoveNext()
现在,我没有更改字典中的值或键,没有 其他线程使用字典。
为什么我收到此错误?
谢谢, 奥马尔
答案 0 :(得分:1)
在字典中改变一个值本身,不会导致抛出此异常。您必须为要抛出的异常添加或删除密钥对。
即使您正在改变某个键,它也不会抛出此异常,它只会(可能)无法正常运行,因为它无法正确找到项目。
理想情况下,如果您正在调用的函数是向字典添加对,则它应该从方法中返回这些密钥对,然后调用者可以存储这些值并在循环结束后添加它们,而不是变异你在列举它时的字典。
答案 1 :(得分:-1)
简单而不是遍历字典,遍历键并使用键作为字典的索引。