Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
207 views
in Technique[技术] by (71.8m points)

c# - Collection was modified. Enumeration operation may not execute

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);
            }
        }
     }
}

after first loop of foreach I receive Collection was modified. Enumeration operation may not execute. How to get out of it?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Since you are not changing the Keys, maybe you can try this:

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);
            }
        }
     }
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...