2014-03-13 66 views
-1
Dictionary<string, lim> urlsLimited = new Dictionary<string, lim>(); 
struct lim 
{ 
    public int min; 
    public int max; 
} 


foreach (KeyValuePair<string, lim> pair in urlsLimited) 
{ 
    if (urlsLimited[pair.Key].min < urlsLimited[pair.Key].max) 
    { 
     string like = od.LikeDiscussions(pair.Key); 
     if (like == "Like") 
     { 
      lock (locker) 
      { 
       good_like++; 
       lim val = pair.Value; 
       val.min++; 
       urlsLimited[pair.Key] = val; 
       log_good_like(good_like); 
      } 
     } 
    } 
} 

第1次循環後,我收到的foreach收集被修改。枚舉操作可能無法執行。如何擺脫它?收藏已修改。枚舉操作可能不會執行

+2

你必須停止在foreach循環修改集合。 –

+1

在枚舉過程中,您正在修改字典條目'urlsLimited [pair.Key] = val;'。這是不允許的。在列舉時不要修改字典 –

回答

-1

這將解決你的問題:
foreach (KeyValuePair pair in urlsLimited.ToArray())

+0

爲什麼downvoting這個? – AcidJunkie

1

既然你不改變Keys,也許你可以試試這個:

foreach (var key in urlsLimited.Keys) 
{ 
    if (urlsLimited[key].min < urlsLimited[key].max) 
    { 
     string like = od.LikeDiscussions(key); 
     if (like == "Like") 
     { 
      lock (locker) 
      { 
       good_like++; 
       lim val = pair.Value; 
       val.min++; 
       urlsLimited[key] = val; 
       log_good_like(good_like); 
      } 
     } 
    } 
} 
相關問題