2013-02-16 1 views
5

표현에 Func을 를 변환하는 방법 : 나는이 같은 Func을 가지고 <Func<T,bool>>

Func<MyClass, bool> func = x=>Id == 5; 

내가로 변환 할 수 있습니다 방법 :

Expression<Func<MyClass, bool>> 
+1

표현식은 람다 함수의 중간 표현입니다. Func은 컴파일 된 람다 함수입니다. 두 사람을 회심시킬 수 있다고 생각하지 마십시오. 왜 그럴 필요가 있니? – akhisp

답변

3

이 시도를 :

Func<MyClass, bool> func = x=>Id == 5; 
Expression<Func<MyClass, bool>> expr = mc => func(mc); 
+1

이것은 실제로'expr'을'MyClass'을 취하고'bool'을 반환하는 델리게이트에 대한 호출로 설정합니다. 'expr'은 실제 람다에 대한 구문 트리를 가지고 있지 않습니다. – Sean

+0

예, 그렇습니다. 그래서? 아마도 질문의 저자는 바로 그것 일 것입니다. – Memoizer

+1

답변을 받아 들여서는 안됩니다. 이 방법은 표현식으로 변환되지 않습니다. –

2

사용자가 만든 대리인에 대한 호출을 나타내는 식을 만들 수 있습니다. 하지만 대개의 경우 Expression을 사용할 때 코드를 이해하는 것이 좋습니다 (예 : SQL로 변환). 그리고 불투명 한 함수를 호출하는 표현식으로는 그렇게 할 수 없습니다.

9

당신은 쓸 수 있습니다 :

Expression<Func<MyClass,bool>> expr = x=>Id == 5; 

Id == 5에 대한 식 트리로 expr을 설정합니다.

당신이 할 경우

Func<MyClass, bool> func = x=>Id == 5; 
Expression<Func<MyClass, bool>> expr = mc => func(mc); 

그런 다음이 func를 호출하는 식 트리로 expr을 설정합니다, func의 몸이 아닌 식 트리.