2

ToLower以下のExpression呼び出しを使用して、文字列を大文字小文字に変換しようとしました。

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}

4

1 に答える 1

14

日付文字列をある形式で取り、それを別の形式に再フォーマットできるようなメソッドはありません。その文字列を に変換してから にDateTime戻す必要がありstringます。

このようなラムダを作成する方法は次のとおりです。

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"
于 2012-07-12T14:21:33.917 に答える