C # Methode akzeptiert ein Prädikat - sieht das ok aus?

8

Ich hätte gerne eine Methode mit folgender API:

%Vor%

Wird so etwas funktionieren?

%Vor%

Wenn ja, kann ich komplexere Prädikate wie ( pseudocode ) angeben:

%Vor%     
Ben 05.02.2010, 11:43
quelle

3 Antworten

19

Das sieht absolut gut aus. Wenn Sie jedoch das Prädikat mit LINQ to SQL verwenden möchten, sollten Sie Folgendes verwenden:

%Vor%

Das bedeutet, dass der Lambda-Ausdruck in einen Ausdrucksbaum anstelle eines Delegaten umgewandelt wird - und dieser Ausdrucksbaum kann dann in SQL konvertiert werden.

    
Jon Skeet 05.02.2010, 11:46
quelle
3

Ja, das wird funktionieren.

Was Sie dem Compiler sagen, ist, dass Sie eine Funktion übergeben werden, die für ein User -Objekt funktioniert, und ein bool zurückgibt - wie die Funktion aussieht, liegt ganz bei Ihnen. Sie können ziemlich komplexe Verschachtelungstypen auch mit ors ( || ) und ands ( && ) erhalten, aber wenn es zu schwer wird zu sehen, was das Prädikat tut, sollten Sie das Refactoring in Betracht ziehen.

Aber im Grunde jedes Lambda, das zum Beispiel u als ein User -Objekt nimmt und es in einen Ausdruck verwandelt, der bool zurückgibt, funktioniert.

    
Tomas Lycken 05.02.2010 11:44
quelle
2

Ein Tipp: Sie können Prädikat & lt; T & gt; anstelle von Func & lt; T, bool & gt ;, was ein wenig klarer ist (Prädikat & lt; T & gt; ist in .net 3.5, Namespace System eingebaut).

    
ljs 05.02.2010 11:47
quelle

Tags und Links