0

ディクショナリにいくつかの値を追加する次のコードがあります。アイテムがディクショナリに追加されるときに、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 );
            }
        }
    }
}
4

1 に答える 1

4

はい、これはスレッドセーフではありません。あるスレッドがディクショナリを変更しているときに別のスレッドがContainsロックの外側で実行すると、例外が発生します。

于 2012-07-04T10:12:38.070 に答える