Ermitteln, ob das Objekt ein PrädikatT ist

8

Ich habe eine IList<Delegate> , die einige Func<bool> s und einige Predicate<T> s enthält, wobei T variiert. Ich muss später herausfinden, welche dieser Elemente Predicate<T> s sind, aber ich möchte die Tür nicht schließen, um später weitere Delegate -Typen zur Liste hinzuzufügen, also möchte ich dies nicht tun, indem ich Objekte nach% identifiziere. co_de%.

Die höchste Abstraktion unterhalb von !(current_delegate is Func<bool>) ist Predicate<T> , was nicht hilfreich ist (würde einen nicht-generischen MulticastDelegate type unter Predicate benötigen), und das Vorhandensein des generischen Parameters zu identifizieren, ist auch nutzlos angesichts des anderen generischen Parameters Predicate<T> s, die in der Liste vorhanden sein können.

Die einzige andere Sache, die ich in Betracht gezogen habe, ist das Delegate von Name zu überprüfen. Für mich ist der String-Vergleich ein Nah-Geruch, aber vielleicht ist das der beste und / oder einzige Weg - du sagst es mir.

Was ist der beste Weg, um definitiv zu bestimmen, dass ein Type irgendein object ist, ohne den Typ von Predicate<T> zu kennen?

    
Jay 23.02.2010, 17:11
quelle

4 Antworten

8

So:

%Vor%     
SLaks 23.02.2010, 17:16
quelle
2
%Vor%

Wenn Sie eine generische Liste haben, brauchen Sie die Typen nicht zu überprüfen. Vielleicht möchten Sie Ihr Design überdenken, wenn Sie nach bestimmten Typen innerhalb einer Liste suchen müssen.

    
BFree 23.02.2010 17:14
quelle
0

Sie können eine Liste spezieller Klassen erstellen, die Ihre Delegierten einhüllen und zusätzliche Sortierinformationen bereitstellen. So werden Sie das Problem indirekt lösen.

    
Kerido 23.02.2010 17:14
quelle
0

Das sollte gut genug funktionieren:

%Vor%

Der Trick ist, wenn Sie die Funktion tatsächlich aufrufen möchten, müssen Sie Reflexion verwenden.

Hier sind einige Tests:

%Vor%     
Frank Krueger 23.02.2010 17:21
quelle

Tags und Links