2013-02-16 35 views
5

İfade Func dönüştürmek için: Böyle bir Func var <Func<T,bool>>

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

ben dönüştürebilirsiniz nasıl

Expression<Func<MyClass, bool>> 
+1

İfade bir Lambda işlevinin bir Ara Temsili olduğunu. Func, derlenmiş lambda işlevinin kendisidir. İkisi arasında dönüş yapabileceğinizi düşünmeyin. Bunu neden yapmak zorundasınız? – akhisp

cevap

3

bu deneyin:

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

Bu, "exp" öğesinin bir "MyClass" alan ve bir "bool" döndüren bir temsilci çağrısı olmasını ayarlar. expr, gerçek lambda için bir sözdizimi ağacı tutmaz. – Sean

+0

Evet, öyle. Ne olmuş yani? Belki de sorunun yazarı sadece bu olmalı. – Memoizer

+1

Bu yanıt kabul edilmemelidir. Yöntem ne olursa olsun ifadeye dönüştürülmez. –

2

Oluşturduğunuz temsilci için çağrıyı temsil eden bir ifade oluşturabilirsiniz. Ancak çoğu zaman, Expression s kullanırken, kodun ne yaptığını anlamak için bunu yaparsınız (ör. SQL'e dönüştürmek için). Ve bunu opak bir işlevi çağırmak için bir ifade ile yapamazsınız.

9

sadece yazabilirsiniz:

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

Bu Id == 5 için bir ifade ağacı olmak expr ayarlayacaktır.

Bunu yaparsanız:

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

O zaman bu func bir çağrı için bir ifade ağacı olmak expr ayarlayacaktır, func gövdesi için değil bir ifade ağacı.

İlgili konular