Кажется, что добавление делегата в 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
являются классами, не должно ac
точка отсчета к тому же объекту, хранящемуся в Dictionary
?
So в основном метод Combine возвращает новое значение Action? – Heisenbug
Да. Это типично для операторов (+ или + = в этом случае) –
большое спасибо. Моя ошибка довольно ясна прямо сейчас. – Heisenbug