【问题标题】:Can Linq.Contains throw "Collection was modified; enumeration operation may not execute." exception?Linq.Contains 能否抛出“集合已修改;枚举操作可能无法执行”。例外?
【发布时间】:2012-07-04 10:07:23
【问题描述】:

我有以下代码向字典中添加一些值。 Linq.Contains 方法可以抛出 System.InvalidOperationException "Collection was modified; enumeration operation may not execute." 什么时候将项目添加到字典中?

private static object _lock = new object();
private static Dictionary<Type, A> _dic = new Dictionary<Type, A>();

public static AddNewValue(Type t, A value)
{
    if ( !_dic.Keys.Contains( t ) )
    {
        lock ( _lock )
        {
            if ( !_dic.Keys.Contains( t ) )
            {
                _dic.Add( t, value );
            }
        }
    }
}

【问题讨论】:

  • 你应该使用_dic.ContainsKey。我认为使用_dic.Keys.Contains 违背了使用字典的全部目的。

标签: c# linq exception collections dictionary


【解决方案1】:

是的,这不是线程安全的。如果一个线程正在修改字典,而另一个线程在锁外执行Contains,则会出现异常。

【讨论】:

    猜你喜欢
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    相关资源
    最近更新 更多