В последнее время я читал C # в глубине, и это научило меня лямбда-выражению, я использовал их для передачи данных, чтобы щелкнуть события и такие, как:
image.MouseDown+=(o ,e)=>MethodToDoSomething(DataNeededForAction);
теперь проблема с ними заключается в захвате переменных при использовании в цикле foreach (спасибо Джону Скиту (Jon Skeet) за то, что он действительно прояснил эту часть :), при инициализации нескольких объектов, на которые есть подписки, на которые я подписываюсь, я обычно сталкиваюсь с проблемой с переменной отлов. рассмотрим следующий пример:
foreach (var game in GamesCollection)
{
Image img = new Image();
img.Width = 100;
img.MouseDown+=(o,e) => MyMethod(game.id);
}
Чтобы избежать захвата в этой ситуации, я должен добавить некоторую переменную для присвоения игры, а затем передать эту переменную методу, это создает дополнительный неясный код и, в основном, дополнительный беспорядок.
Есть ли способ обойти это? Что-нибудь, что хотя бы будет выглядеть чище?
Thx, Ziv