Funcs and Actions - это новые «типы» делегатов, и я использую их много с Linq и действительно другими странными ситуациями. Для Linq они хороши, потому что лично я предпочел бы иметь описательное имя, чем лямбда-выражения:
someList.Select(item => item.Name);
Где с Func я могу:
Func<Item, String> itemName = item => item.Name;
...
someList.Select(itemName);
Это может быть строка больше, но там времена, когда я нахожу себя несколько раз повторяя определенные лямбда-выражения в классе, поэтому лично я думаю, что Funcs хорошо работают для этого.
Другая ситуация - из-за отсутствия лучшего термина Method Factory. В основном это словарь, который содержит список действий, как значение и говорят об Enum в качестве ключа:
Dictionary<UserType, Action<User>> showControls;
showControls = new Dictionary<UserType, Action<User>>();
showControls.Add(SomeEnum.Admin, setControlsForAdmin);
showControls.Add(SomeEnum.Normal, setControlsForNormalUser);
showControls.Add(SomeEnum.Unregistered, setControlsForUnregisteredUser);
И тогда у меня есть методы сами выписанных в другом месте на странице. И использование будет:
showControls[user.UserType]();
Или, может быть, вы хотите передать сам метод другому:
Action<User> neededMethod;
neededMethod = showControls[user.UserType];
SomeMethod(neededMethod);
Я уверен, что есть гораздо лучшее применение для делегатов, но они полезны.
не забудьте Лямбдами – 2008-11-20 18:49:01