Ich möchte eine MethodInfo
einer Methode aus einer generischen Klasse mit einem nur zur Laufzeit bekannten Typparameter erhalten.Wie finde ich MethodInfo für eine Methode einer generischen Klasse mit stark typisierter Reflektion?
Hier ist, wie ich ein MethodInfo
für eine generische Methode aus einer nicht-generischen Klasse bekommen würde:
class MyClass
{
public void MyMethod<T> (T arg)
{
}
}
static MethodInfo Resolve (Type type)
{
Expression<Action<MyClass, object>> lambda = (c, a) => c.MyMethod (a);
MethodCallExpression call = lambda.Body as MethodCallExpression;
return call
.Method // Get MethodInfo for MyClass.MyMethod<object>
.GetGenericMethodDefinition() // Get MethodInfo for MyClass.MyMethod<>
.MakeGenericMethod (type); // Get MethodInfo for MyClass.MyMethod<int>
}
Resolve (typeof (int)).Invoke (new MyClass(), new object[] {3});
Nun, wenn ich etwas ähnliches mit einer generischen Klasse versuchen:
class MyClass<T>
{
public void MyMethod (T arg)
{
}
}
static MethodInfo Resolve (Type type)
{
Expression<Action<MyClass<object>, object>> lambda = (c, a) => c.MyMethod (a);
MethodCallExpression call = lambda.Body as MethodCallExpression;
return call
.Method // Get MethodInfo for MyClass<object>.MyMethod
.SomeMagicMethod(); // FIXME: how can I get a MethodInfo
// for MyClass<T>.MyMethod where typeof (T) == type?
}
Resolve (typeof (string)).Invoke (new MyClass<string>(), new object[] {"Hello, World!"});
Ist es möglich?
, die heikel ist, weil 'C .Meth' und' C .Meth' wäre völlig unabhängig Methoden werden nach dem .NET-Typ-System, weil ihre 'DeclaringType' s sind anders. –
usr
Können Sie Ihren Lösungscode reparieren? Sie verwenden die 'method' Variable sowohl als' MethodInfo' als auch als 'MethodInfo []'. Und sogar die Array-Suche nach der gleichen Variablen durchsuchen. Das macht keinen Sinn. – kjbartel
Variable 'Methode' sollte in der Tat ein Array sein, aber der zweite Suchdurchlauf enthält die Lösung, so dass es alles andere als ein Fehler ist. Erwäge, die Frage noch einmal zu lesen. – r3c