런타임에 람다 식을 사용하는 코드 부분이 있는데, 컴파일하고 호출 할 수 있습니다. 실행 시간을 절약하기 위해람다 식에서 매개 변수 바꾸기
Something thing;
Expression<Action<Something>> expression = (c => c.DoWork());
Delegate del = expression.Compile();
del.DynamicInvoke(thing);
, I는 캐시 키 람다 식 문자열 인 Dictionary<String, Delegate>
를 컴파일 그 대리자가 저장된다.
정확하게 동일한 통화의 경우 정상적으로 작동합니다. 그러나 나는 "d => d.DoWork()"와 같은 lambdas를받을 수 있음을 깨달았는데, 실제로 같은 대리자를 사용해야했는데 그렇지 않았습니다.
람다 표현식의 요소를 대체하기 위해 깨끗한 방법 ("String.Replace를 사용하지 않음"으로 읽었습니다. 이미 읽었습니다)을 사용하면 궁금합니다. arg0
두
(c => c.DoWork())
및
(d => d.DoWork())
형질 전환과 비교 람다에서 Expression.Parameter (유형 이름)에 주입 fuctionnally 유사한 것을 사용하여 (arg0 => arg0.DoWork())
있다.
그럴 수 있습니까? (답변에는 C# 4.0이 포함될 수 있습니다.)
키는 항상 (형식) arg => arg.Method() 또는 더 복잡한 형식이 필요합니까? – Elisha
수신 된 람다는'(f, g) => f.Method (g)'와 같은 매개 변수를 더 많이 가질 수 있으며 f 및 g 유형을 갖게됩니다. 열쇠는 실제로 아주 평범하고 돌로 설정되어 있지 않습니다. ((T) arg0, (V) arg1) => arg0.Method (arg1)'와 같이 트릭을 할 수있는 두 개의 람다 사이의 동등성을 나타낼 수있는 적절한 방법입니다. 열쇠. –