Lambda und Ausdruck.Rufen Sie für eine Erweiterung Methode
Brauche ich zur Umsetzung ein Ausdruck für eine Methode wie hier:
var prop = Expression.Property(someItem, "Name");
var value = Expression.Constant(someConstant);
var contains = typeof(string).GetMethod("Contains", new[] {typeof(string)});
var expression = Expression.Call(prop, contains, value);
Aber für meine extension Methode:
public static class StringEx
{
public static bool Like(this string a, string b)
{
return a.ToLower().Contains(b.ToLower());
}
}
Leider, nächsten code löst eine ArgumentNullException-Ausnahme für einen parameter "Methode":
var like = typeof(string).GetMethod("Like", new[] {typeof(string)});
comparer = Expression.Call(prop, like, value);
Was ich falsch mache?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, diese
Können Sie dies so tun:
Können Sie pass
prop
als ersten parametervalue
als zweiten parameter an wie oben beschrieben.Vielleicht werden Sie brauchen, um eine vollständige Abfrage vor der Anwendung einer extension method.
Ich bin mir nicht sicher, aber Sie bekommen nur eine Erweiterung Methode aus der statischen Klasse mit der spiegelung. Extension-Methoden sind nicht wirklich Hinzugefügt, um die Klasse, und kann daher nicht abgerufen werden, mit
GetMethod
.typeof(StringEx).GetMethod("Like", new[] {typeof(string)});
aber, wie ich Spritzen mein Parameter im Ausdruck.Anrufen?Verwenden
ie. rufen Sie es aus der Erweiterung geben, die nicht von der erweiterten Typ.
Wenn Sie wollen, um Ihren Erweiterung Verfahren haben, müssen Sie dies so tun: