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?
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%Tags und Links .net c# reflection types delegates