В чём отличие между `Func<T>`, `Action<T>` и `Predicate<T>` в C#, и в каких ситуациях каждый из них лучше всего использовать? — ДейлиПреп