1

メソッドを使用して取得した参照を介してデリゲートを追加しようとすると、ActionストアドにデリゲートをDictionary追加しようとすると失敗するようです。TryToGetValue

エラーを再現する例を次に示します。

void Foo()
{
  Console.WriteLine("Foo");
}
void Bar()
{   
  Console.WriteLine("Bar");
}

Dictionary<int, Action> dic = new Dictionary<int, Action>();    

dic[3] = delegate{};
dic[3] += Foo;

Action ac;
if (dic.TryGetValue(3,out ac))
{
  Console.WriteLine("Found");
  ac += Bar;
}
dic[3]();

出力:

Found
Foo

値は見つかりましたが、 と が異なるオブジェクトへの参照であるようacですdic[3](Barは表示されません)。

何が起こっているのか誰か説明してくれませんか? 正確には何が満たされていout parameterますか?Actionクラスであるため、参照はに格納されている同じオブジェクトを指すべきではありませんacDictionary?

4

1 に答える 1