Muszę MethodInfo dla metody zwanej w działaniu delegata w celu sprawdzenia, czy metody zwane w działaniu ma MyCustomAttibutedelegat akcji. Jak uzyskać informacje o metodach wywołanych w delegacie?
public void Foo(Action action)
{
if(Attribute.GetCustomAttributes(action.Method, typeof(MyCustomAttribute)).Count() == 0)
{
throw new ArgumentException("Invalid action");
}
}
Sposób Foo powinien być w stanie nazwać w następujący sposób:
Foo(() =>
{
instanceOfFooClass.Method1().Method2();
});
W metodzie Foo chcę mieć pewność, że Method1 i Method2 mają MyCustomAttribute. Jednak action.Method przekazuje mi MethodInfo, która jest działaniem delegata, co dzieje się podczas używania wyrażenia lambda. Czy istnieje sposób, aby uzyskać Method1 i Method2 MethodInfo?
Doskonałe pytanie. Niezbyt łatwo, AFAIK. Mógłbyś * prawdopodobnie * zrobić to z łatwością z "Wyrażeniem", ale wtedy nie możesz * bezpośrednio * wykonać go –
Zgadzam się, będziesz musiał użyć drzewek wyrażeń do tego. Nie wiem, ile to zaszkodzi wydajności. –
Jeśli nie bezpośrednio, to w jaki sposób można go wykonać? – Joanna