簡體   English   中英

在迭代字典時將屬性設置為排序字典的值

[英]Set property in value of sorted dictionary while iterating it

我有一個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()

現在,我沒有更改字典中的值或鍵,沒有其他線程在使用字典。

為什么會出現此錯誤?

謝謝,Omer

本身或本身都不會改變字典中的值,不會引發此異常。 您必須添加或刪除密鑰對,否則將引發該異常。

即使您正在更改鍵,它也不會引發此異常,它只會(可能)無法正常運行,因為它將無法正確找到項目。

理想情況下,如果您要調用的函數在字典中添加了對,則應從方法中返回這些鍵對,然后調用者可以存儲這些值並在循環結束后添加它們,而不是在修改字典時您正在枚舉。

而不是遍歷字典,而是遍歷鍵並將鍵用作字典的索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM