[英]Expression.Call usage
我試圖使用下面的Expression調用將字符串轉換為ToLower
案例。
var tolowerMethod = typeof(string).GetMethods().Where(m => m.Name == "ToString").FirstOrDefault();
var toLowerMethodCall = Expression.Call(memExp,tolowerMethod,new Expression[0]);
我面臨一些問題,要創建一個Expression調用來格式化值,如: "05/12/2012 12:00:00"
到{0:MM/dd/yyyy}
。
那么沒有這樣的方法可以采用一種格式的日期字符串並將其重新格式化為另一種格式。 您必須將該字符串轉換為DateTime
然后再轉換為string
。
這是你如何創建這樣一個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);
然后編譯並調用它。
var method = lambdaExpr.Compile();
method("05/12/2012 12:00:00"); // "05/12/2012"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.