В LINQ Func<T, bool>
используется для таких вещей, как Where
, так что другая перегрузка, которая принимает индекс, а также элемент, является согласованной:
IEnumerable<T> Where(IEnumerable<T> source, Func<T, bool> predicate)
IEnumerable<T> Where(IEnumerable<T> source, Func<T, int, bool> predicate)
Лично я думаю, что имя Predicate
является более наглядным, поэтому I будет использовать его в ситуациях, когда нет проблемы согласованности, подобной описанной выше. Имейте в виду, что нужно сказать только то, что нужно знать только о типах делегатов Action
и Func
...