Linq.Contains可以抛出“集合被修改;枚举操作可能无法执行”。例外?

时间:2012-07-04 10:07:23

标签: c# linq exception collections dictionary

我有以下代码,可以为字典添加一些值。当项目添加到词典时,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 );
            }
        }
    }
}

1 个答案:

答案 0 :(得分:4)

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