[英]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.