0

我定义了一个 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()

现在,我没有更改字典中的值或键,没有其他线程使用字典。

为什么我会收到此错误?

谢谢, 奥马尔

4

2 回答 2

1

改变字典中的值本身不会导致抛出此异常。您必须添加或删除密钥对才能引发该异常。

即使你改变了一个键,它也不会抛出这个异常,它只是(可能)不能正常工作,因为它不能正确地找到项目。

理想情况下,如果您正在调用的函数正在向字典中添加对,则它应该从方法中返回这些键对,然后调用者可以存储这些值并在循环结束后添加它们,而不是改变字典 while你在枚举它。

于 2013-10-17T15:16:34.883 回答
-1

与其遍历字典,不如遍历键并将键用作字典的索引。

于 2013-10-17T15:11:28.320 回答