Hat jemand Ahnung, warum Aufruf von GetRuntimeMethod Null für den folgenden Fall zurückgibt?RuntimeReflectionExtensions.GetRuntimeMethod funktioniert nicht wie erwartet
_toListMethod = typeof(Enumerable).GetRuntimeMethod("ToList", new Type[] { typeof(IEnumerable<>) });
Es sollte funktionieren wie es funktioniert für:
_castMethod = typeof(Enumerable).GetRuntimeMethod("Cast", new Type[] { typeof(IEnumerable) });
ich versucht, dies zu debuggen, indem Sie den folgenden Code ausführen:
var bah = typeof (Enumerable).GetRuntimeMethods().Where(m => m.Name.Contains("ToList"));
var derp = bah.First().GetParameters();
Zu meiner Überraschung, die erste Zeile liefert ein Sammlung, die das MethodInfo enthält, das ich versuche, zu erhalten, und die zweite Zeile bestätigt, dass der erwartete Parametertyp IEnumerable ist <>.
Die beiden Methodensignaturen Cast und ToList sind ähnlich, und ich kann keinen Grund sehen, warum das Abrufen von MethodInfo für ToList fehlschlagen würde.
Dieser Code wird in einer Portable Class Library mit TargetFrameworkProfile auf Profile78 ausgeführt.
Danke!
Update: Bis ich eine gute Lösung haben, gibt es eine hässlich Abhilfe, die für mich funktioniert:
_toListMethod = typeof(Enumerable).GetRuntimeMethods().First(m => m.Name.Contains("ToList"));
Guter Punkt. Die Cast-Methode hat einen nicht generischen Parametertyp. Ich stimme Ihnen zu, es sieht so aus, als ob es etwas mit generischen Parametertypen zu tun hat. –
@TiagoMargalho Ich habe eine funktionierende Erweiterungsmethode hinzugefügt (hoffentlich hat copy-paste nichts kaputt gemacht), die die möglichen Methoden durchläuft und den Namen der Typparameter überprüft. Funktioniert prächtig in diesem Fall, obwohl ich glaube, es ist ein gefährlicher Weg zu gehen :) – flindeberg