Ich arbeite zZ an einer Erweiterungsmethode, die erleichtert, was der Titel der Frage vorschlägt.Sicherste Methode, die Invoke MethodInfo von der Instanz der Aktion <T> zu erhalten
könnte ich natürlich. Verwenden Sie den GetMetohd ("Invoke") Methodenaufruf auf den Typ und damit fertig sein, Aber etwas sagt mir, das ist nicht der "sicherste" Weg zu gehen. Klassen und Typen können sich ändern, einschließlich derer in der BCL.
Also habe ich mit der folgenden LINQ-Anweisung kommen, die ganz gut funktioniert:
public static class ActionExtensions
{
public static MethodInfo GetInvoke<T>(this Action<T> obj)
{
var actionType = obj.GetType();
var tType= typeof(T);
return (
from methodInfo
in actionType.GetMethods()
let par = methodInfo.GetParameters()
where par.Length == 1 && par[0].ParameterType == tType
select methodInfo
).FirstOrDefault();
}
}
Die Sache ist, auch diese etwas zweifelhaft empfindet, seit dem ersten Tag Aktion kann ein anderes Verfahren mit einem solchen ändern und enthalten Eigenschaften .. selbst wenn ich die Einschränkung "HasGenericParameters" hinzufüge, gibt es keine Sicherheit.
Haben Sie irgendwelche Ideen haben, einen Weg in Bezug auf die genaue Method Instanz relevant
"Action<T>.Invoke()"
'Aktion' hat eine .Method -Eigenschaft bereits, die MethodInfo für genau diese Methode hinter dem Delegaten zurückgibt. –
Suchen nach, wie man einen Delegaten mit Reflektionsemblem aufruft (und ich nehme an, dass Sie das wollen), jeder scheint sich auf 'GetMethod (" Invoke ")' zu verlassen. Die .NET-Entwickler können nie etwas tun, um den ganzen Code zu brechen. Ich denke, darauf kann man sich verlassen. – usr
brilliant! Danke! @ RexM –