C# 表达式.调用用法

C# 表达式.调用用法,c#,expression-trees,C#,Expression Trees,我尝试使用下面的表达式调用将字符串转换为ToLower大小写 var tolowerMethod = typeof(string).GetMethods().Where(m => m.Name == "ToString").FirstOrDefault(); var toLowerMethodCall = Expression.Call(memExp,tolowerMethod,new Expression[0]); 我在创建表达式调用以格式化值时遇到了一些问题,例如:“05/12/2

我尝试使用下面的表达式调用将字符串转换为
ToLower
大小写

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

我在创建表达式调用以格式化值时遇到了一些问题,例如:
“05/12/2012 12:00:00”
{0:MM/dd/yyyy}

没有这样的方法可以将日期字符串转换成一种格式并重新格式化为另一种格式。您必须将该字符串转换为
日期时间
,然后再转换回
字符串

以下是如何创建这样一个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);

这是什么语言??请在问题上加上标签,你有哪些错误,或者出了什么问题?我可以看到在调用
新表达式[0]
时缺少paren,但我猜这是一个输入错误?您的问题没有意义。甚至没有一个普通的方法可以做到这一点。您的问题是,您希望将字符串转换为小写,然后实际的代码使用
ToString
,然后您的最后一段说您希望格式化
日期时间。你到底想要什么?
var method = lambdaExpr.Compile();
method("05/12/2012 12:00:00"); // "05/12/2012"