2013-07-30 13 views
5

MemberInfo örneğini "Func" türüne dönüştürmek için bir yöntem arıyorum (daha sonra lambda ifadesiyle kullanmak için).Yansıma MemberInfo to Func <T1, T2>

Lets, şimdi Func<int, bool>; tipine dönüştürmek istiyorum, ben bir şekilde MemberInfo "mi" örneğini almak Ben yansıma kullanma tip

public bool func(int); 

üyesi işlevini olduğunu varsayalım. gibi bir şey:

Func<int, bool f = myType.GetMember(mi.Name); 

bunu yapmanın bir yolu var mı?

ps. func olmayan bir static yöntemdir beri Marc Grawell cevabı, sorunumu, target kullanmak istediğiniz nesne olduğunu ileri yorumlarla

burada
+0

Func , belirli bir örnekte * bir işlevdir, oysa MemberInfo bir örneğe bağlı değildir. Kodunuzda mevcut örnek var mı? – Heinzi

+0

Hangi hedefi çağırmak isterdiniz? Ve biliyor musun * her zaman * bir bool döndürecek ve bir int götürecek? Temel olarak 'Delegate.CreateDelegate' ... –

+0

'a bakın. "daha sonra lambda ifadesi ile kullanmak için" - bir delege almak bir lambda ifadesi ile size yardımcı olmaz –

cevap

5
Func<int,bool> f = Delegate.CreateDelegate(
      typeof(Func<int,bool>), target, (MethodInfo)mi); 

Not gerek giderir. Bir static yöntemiyse, bunu atlayabilirsiniz (veya null geçirin). Alternatif olarak, 'u (veya null'u iletirseniz), Foo öğesinin func bildiren türden bir Func<Foo, int, bool> olmasını sağlayabilirsiniz.

Ancak !!! Bir lambda ifadesi oluşturma açısından bir Func<int,bool>'un büyük ölçüde anlamsız olduğunu unutmayın; lambda ifadeleri nadiren delegeleri kullanın.

+0

Merak ediyorum, kullandığınız 'Delegate.CreateDelegate' ve 'MethodInfo.CreateDelegate arasında herhangi bir fark var mı? 'cevabımı koydum? – hvd

+0

Son ifadenizden ne kastettiğinizi açıklayabilir misiniz, "Ancak… lambda ifadeleri nadiren delegeleri kullanır." _? NET 4.5'den önce – stakx

+0

@hvd, çok büyük bir fark: 'MethodInfo.CreateDelegate' mevcut değil –