Attualmente sto lavorando su un metodo di estensione che facilita il suggerimento del titolo della domanda.Il metodo più sicuro per richiamare MethodInfo dall'azione <T>'s Instance
Potrei, ovviamente. usa la chiamata al metodo GetMetohd ("Invoke") sul tipo e fallo con esso, Ma qualcosa mi dice che questo non è il modo "più sicuro" per andare. Classi e tipi possono cambiare, compresi quelli nel BCL.
Così mi è venuta in mente la seguente dichiarazione LINQ, che funziona bene:
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();
}
}
La cosa è, anche questo si sente un po 'incerto, dal momento che uno giorno d'azione può cambiare e contenere un altro metodo con tale tratti .. anche se aggiungo il vincolo "HasGenericParameters", non c'è garanzia di sicurezza.
Avete idee per quanto riguarda un modo per ottenere l'esatto esempio MethodInfo rilevanti per
"Action<T>.Invoke()"
'L'azione' ha già una proprietà .Method che restituisce MethodInfo per il metodo esatto dietro al delegato. –
Cercando come richiamare un delegato usando emit di reflection (e presumo che lo si voglia) tutti sembrano dipendere da 'GetMethod (" Invoke ")'. Gli sviluppatori .NET non possono mai fare nulla per violare tutto questo codice. Penso che sia sicuro fare affidamento su questo. – usr
geniale! grazie! @RexM –