Func <TObject, bool> или Predicate <TObject>? - PullRequest
8 голосов
/ 18 апреля 2009

Я снова и снова видел API (особенно в .NET Framework), который использует Func<TObject, bool>, когда Predicate<TObject>, по-видимому, является совершенно ответственным вариантом. Какие хорошие причины могут быть у дизайнера API для этого?

Ответы [ 3 ]

7 голосов
/ 18 апреля 2009

В 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 ...

2 голосов
/ 18 апреля 2009

Соответствие с остальной частью LINQ?

(«Аномалия» отмечена, но с анонимными делегатами и лямбда-функциями это не имеет значения, поэтому почти никогда не нужно знать о разнице.)

0 голосов
/ 18 апреля 2009

Делегаты Func <> - это «новый» способ указания лямбда / делегатов к методам. Тем не менее, есть просто удобный набор делегатов, и если есть более конкретный делегат, который делает то же самое, то сделайте это.

В вашем примере я бы всегда использовал Предикат <>, поскольку он намного более самодокументирован (при условии, что предикат - это то, что вам нужно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...