2009-11-03 10 views

Répondre

4

Je ne sais pas où exactement avez-vous besoin d'expressions lambda dynamiques. Quoi qu'il en soit, la meilleure façon de générer dynamiquement des expressions lambda est d'utiliser des arbres d'expression. Voici deux bons tutoriels sur le sujet:

Ce code génère une expression lambda comme celle que vous avez demandé ("x => x.name «):

MemberInfo member = typeof(AClassWithANameProperty).GetProperty("Name"); 

//Create 'x' parameter expression 
ParameterExpression xParameter = Expression.Parameter(typeof(object), "x"); 

//Create body expression 
Expression body = Expression.MakeMemberAccess(targetParameter, member); 

//Create and compile lambda 
var lambda = Expression.Lambda<LateBoundGetMemberValue>(
    Expression.Convert(body, typeof(string)), 
    targetParameter 
); 
return lambda.Compile(); 

espérons que cette aide

+0

Merci pour le bel exemple! Cela m'a beaucoup aidé! –

+1

Notez que le premier lien est mort –

2

Voir Dynamic LINQ

Alternativement, vous pouvez utiliser une instruction switch, réflexion ou le type dynamic en C# 4 pour renvoyer la valeur en fonction d'un nom de domaine fourni.

Cela a également été fait à la mort previously

+0

Merci beaucoup pour vos commentaires! Mon but est d'éviter le code de commutation et la réflexion le rend plus lent. –

+0

Oui, c'est logique. Bonne chance. L'utilisation de Dynamic et/ou Iron * est plus propre que Dynamic LINQ ou reflection.emit ou Expression.Compile si vous essayez de garder votre code maintenable et Clean IMO. –

+0

Merci encore pour l'excellente contribution. –