Ich möchte ein Linq IQueryable Toolkit im Projekt auf .NET Compact Framework verwenden. Die Linq-Fähigkeiten in CF ist ein wenig shapred - d. H.: IQueryable-Schnittstelle ist nicht verfügbar. Also habe ich Bibliotheken von Drittanbietern gefunden, die fehlende Funktionalität implementieren, was ich brauche.Workaround für MethodBase.GetCurrentMethod() auf Compact Framework 3.5
Jetzt habe ich ein Problem mit der fehlenden Methode "MethodBase.GetCurrentMethod()". Es gibt ca. 100 Methoden, die diese Methode verwenden. Also brauche ich nicht den genauen Klon von "GetCurrentMethod()". Die Problemumgehung für diesen speziellen Fall ist ausreichend.
Probe von Originalcode:
public static bool Any<TSource>(this IQueryable<TSource> source) {
return source.Provider.Execute<bool>(Expression.Call(null, ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(new Type[] { typeof(TSource) }), new Expression[] { source.Expression }));
}
public static bool Any<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate) {
return source.Provider.Execute<bool>(Expression.Call(null, ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(new Type[] { typeof(TSource) }), new Expression[] { source.Expression, Expression.Quote(predicate) }));
}
posibile Die Lösung ist "(Methodinfo) MethodBase.GetCurrentMethod()" mit spezifischem Methodenaufruf ersetzen. Zum Beispiel: GetMethod_Any_TSource_On_Source() und GetMethod_Any_TSource_On_Source_With_Predicate_TSource_Bool().
Ich suche nach einer handlichen Lösung, wie man es löst.
+1 sehr Vielen Dank für die Antwort. Actualy ich habe schreibe alle ".GetCurrentMethod" als "((Func)% TypeName%.% MethodName%). Methode". Es war eine Menge Arbeit, aber die Leistung ist besser als ".GetCurrentMethod" aufrufen und es funktioniert. Ich hatte Glück, dass ich es nur in statischen Methoden brauchte, also war das Umschreiben nicht so komplex. Der Weg mit Ausnahme werfen ist wirklich peinlich, und es tötet eine Leistung, wenn es häufig verwendet wird. Aber danke für den Vorschlag. –
TcKs
Cool, hast du es mit der Hand gemacht oder ein Werkzeug benutzt? Wenn Sie das mit einem Werkzeug vielleicht als Antwort hinzufügen könnten (und es akzeptieren), wäre es für andere nützlich. – ShuggyCoUk
Ich habe es von Hand gemacht, weil Generika in Klassen und Methoden sehr häufig verwendet wurden. Eigentlich habe ich es schon fast gemacht, wie du geschrieben hast. Also gut, ich kann deine Antwort akzeptieren. – TcKs