Funcs and Actions are the new "types" of delegates, and I use them a lot with Linq and really other odd situations. For Linq, they are good, because I personally prefer a descriptive name over the lambda expression:
someList.Select(item => item.Name);
Where with Func I can:
Func<Item, String> itemName = item => item.Name;
...
someList.Select(itemName);
It may be a string larger, but there are times when I find that I repeat some lambda expressions in a class several times, so personally I think Funcs work well for this.
, 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);
, , .