2009-04-18 18 views

Odpowiedz

7

W LINQ, Func<T, bool> służy do rzeczy jak Where tak, że inny przeciążenie który przyjmuje indeksu, jak również jako element jest zgodny:

IEnumerable<T> Where(IEnumerable<T> source, Func<T, bool> predicate) 
IEnumerable<T> Where(IEnumerable<T> source, Func<T, int, bool> predicate) 

Osobiście myślę, że nazwa Predicate jest bardziej opisowy, więc I by używać go w sytuacjach, w których nie ma problem konsystencja jak ten powyżej. Pamiętaj, że jest coś do powiedzenia tylko potrzebują wiedzieć o rodzajach delegatów Action i Func ...

+0

Tak, obawiam się, że odpowiedź nie będzie lepsza od tej. To jest jak jakaś biurokracja kodowana przez aspekt czystości. (tzn. predykat powinien być zawsze używany pomimo spójności). –

2

Spójność z resztą LINQ?

(The „anomalia” odnotowano, ale z anonimowych delegatów i funkcji lambda nie ma znaczenia, więc prawie nigdy nie trzeba zdawać sobie sprawę z różnicy).

+0

Tak, ale dlaczego LINQ to zrobić? –

+0

Nie uważam też, że "konsystencja" z resztą LINQ jest powodem dla dobra. –

+0

Zobacz odpowiedź Jona dla jednej możliwości. – Richard

0

FUNC <> Delegaci są „nowe "sposób określania lambdas/delegatów na metody. Jednak jest tam tylko poręczny zestaw delegatów, a jeśli jest bardziej konkretny delegat, który robi to samo, to idź do tego.

W przykładzie bym zawsze iść do orzecznika <> jak to jest znacznie bardziej samodokumentujące (zakładając, że predykat jest to, co chcesz)

Powiązane problemy