2009-04-18 14 views

Antwort

7

In LINQ, Func<T, bool> für Dinge wie Where verwendet wird, so dass die andere über~~POS=TRUNC, die den Index als auch das Element nimmt, ist konsequent:

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

ich persönlich denke, der Name Predicate mehr beschreibend ist, so ich würde es in Situationen verwenden, in denen es wie die oben keine Konsistenz Problem ist. Wohlgemerkt, es gibt etwas zu sagen, nur über die Action und Func Delegattypen wissen müssen ...

+0

Ja, ich fürchte, die Antwort wird nicht besser werden. Es ist wie eine Art Code-Bürokratie, die einen Aspekt der Reinheit gewonnen hat. (Prädikat sollte trotz Konsistenz immer verwendet werden). –

2

Konsistenz mit dem Rest von LINQ?

(Der „Anomalie“ hat zur Kenntnis genommen, aber mit anonym Delegierten und Lambda-Funktionen macht es keinen Unterschied, so gut wie nie bewusst den Unterschiedes sein muß.)

+0

Ja, aber WARUM hat LINQ es tun? –

+0

Ich denke auch nicht, dass "Konsistenz" mit dem Rest von LINQ ist ein gut Grund. –

+0

Siehe Jon's Antwort für eine Möglichkeit. – Richard

0

Die Func <> Delegierten die „neu "Möglichkeit, Lambdas/Delegierte für Methoden anzugeben. Allerdings gibt es nur eine handliche Gruppe von Delegaten, und wenn es einen spezifischeren Delegaten gibt, der dasselbe tut, dann gehen Sie dafür.

In Ihrem Beispiel hat ich immer für das Prädikat gehen würde <> wie es ist viel mehr selbsterklärend (ein Prädikats unter der Annahme ist, was Sie wollen)

Verwandte Themen