0
lI die folgende Funktion haben:ausschließen generische Funktion zur Laufzeit Property
private static Expression<Func<TEntity, TValue>> BuildLambda<TEntity, TValue>(string property) where TEntity : class
{
var param = Expression.Parameter(typeof (TEntity), "e");
var prop = Expression.PropertyOrField(param, property);
return Expression.Lambda<Func<TEntity, TValue>>(prop, param);
}
ich um mit Reflexionen spiele:
Wie diese Funktion zur Laufzeit mit einem dynamischen TEntity und TValue ausschließen. Ist es überhaupt möglich?
Beispiel:
public static void ValidateEntity<TEntity>(AbstractValidator<TEntity> validator,PropertyRule propRule) where TEntity : class, new()
{
var propertyName = propRule.Expression.GetMember().Name;
var propType = typeof(TEntity).GetProperty(propertyName);
//trying to exclude BuildLamdba don't know TValue only have PropertyInfo
//var expresssion = BuildLambda<TEntity, IEnumerable<TValue>>(propertyName);
....
}
Dort finden Sie Erleuchtung: http://StackOverflow.com/Questions/232535/How-Do-I-use-Reflektion-zu-Call-a-generic-Method – csharpfolk
@ Csharpfolk Das einzige Problem mit der Verbindung, die Sie zur Verfügung stellen, ist Wenn die Funktion aufgerufen wird, gibt sie immer ein Objekt zurück, nicht Expression>. Was ich nach dem Aufruf dieser Funktion mache, löst einen Fehler aus, weil der Typ Objekt Expression > ist. Auch wenn ich versuche, mit Convert.ChangeType zu konvertieren, habe ich das gleiche Problem mit der Rückgabe eines Objekts anstelle von Expression >. –
Valter