2012-07-12 2 views
2

아래 표현식 호출을 사용하여 문자열을 ToLower으로 변환하려고했습니다. {0:MM/dd/yyyy}"05/12/2012 12:00:00" : Expression.Call 사용

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

내가 좋아하는 값을 포맷하는 식 전화를 만들기 위해 몇 가지 문제에 직면하고있다.

+0

어떤 언어입니까? 질문에 태그를 답니다. – Mark

+0

어떤 오류가 발생합니까? 아니면 잘못되었습니다. 나는'new Expression [0]'호출에서 괄호가 빠져 있음을 볼 수 있습니다. 그러나 나는 오타라고 생각합니다. – phg

+0

문제가 이치에 맞지 않습니다. 그것을 할 수있는 일반적인 방법조차 없다. – leppie

답변

10

날짜 문자열을 한 형식으로 가져 와서 다른 형식으로 다시 포맷 할 수있는 방법은 없습니다. 해당 문자열을 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"