Utilisation d'Expression.Call

c# expression-trees

Question

J'ai essayé de convertir la chaîne en ToLower cas en utilisant l'appel ci - dessous Expression.

var tolowerMethod = typeof(string).GetMethods().Where(m => m.Name == "ToString").FirstOrDefault(); 
var toLowerMethodCall = Expression.Call(memExp,tolowerMethod,new Expression[0]);

Je rencontre un problème pour créer un appel Expression afin de formater une valeur telle que: "05/12/2012 12:00:00" en {0:MM/dd/yyyy} .

Réponse populaire

Eh bien, il n’existe pas de méthode permettant de convertir une date en chaîne dans un autre format Vous devrez convertir cette chaîne en DateTime puis de nouveau en string .

Voici comment vous pouvez créer un tel lambda:

var dateStr = Expression.Parameter(typeof(string));
var asDateTime = Expression.Call(typeof(DateTime), "Parse", null, dateStr); // calls static method "DateTime.Parse"
var fmtExpr = Expression.Constant("MM/dd/yyyy");
var body = Expression.Call(asDateTime, "ToString", null, fmtExpr); // calls instance method "DateTime.ToString(string)"
var lambdaExpr = Expression.Lambda<Func<string, string>>(body, dateStr);

Puis compilez et appelez-le.

var method = lambdaExpr.Compile();
method("05/12/2012 12:00:00"); // "05/12/2012"


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow