2012-11-28 25 views
5

Bunu çalıştırmadan işlevin adını almak içinC# işlev işaretçisinden işlev adı nasıl alınır?

public void myfunc<a,b>(Func<a,b> functionpointer) 
{ 
    String functionname; 
    // Do some magic to get functionpointers name and set it to functionname 
} 

gibi bir işlev işaretçisi

alır mümkün mü bir işlevi var?

Şu anda çalışan işlevin işlev adını alabileceğinizi biliyorum, ancak arayacağınız bir işlevin adını nasıl alırsınız? Böyle bir soru daha önce yüklenmiş olabilir eğer

i

+1

"Anonim" işlevlerin yararlı bilgiler verebileceğini unutmayın. Myfunc (x => x.Blah) 'gibi bir çağrı için" isim "işlevini bilmek yardımcı olur mu? – dlev

cevap

7

Sen MemberInfo.Name Property

string functionname = functionpointer.Method.Name; 
+0

Performans açısından, bu bir hitin büyüklüğü ne olurdu? Ağır mı –

+0

@BrijeshBharadwaj, işlevi Func'nin bir özelliğidir. Hiç de ağır olmayacak, inanıyorum. Alıcının erişiminde bir performans etkisi olsa bile, ihmal edilebilir. – Habib

+0

@BrijeshBharadwaj İlk sorunun olması gerektiğini düşünüyorum, bu gerçekten istediğiniz adı veya derleyici tarafından oluşturulan rastgele bir isim döndürür. –

0
public void myfunc<a, b>(Expression<Func<a, b>> expr) 
{ 
    Func<a, b> functionpointer = expr.Compile(); 

    String functionname = ""; 
    var mce = expr.Body as MethodCallExpression; 
    if(mce!=null) 
    { 
     functionname = mce.Method.Name; 
    } 
} 
0

Kullanım Yansıma

kullanabilirsiniz C# bunun için bir çözüm bulamıyorum Affet
foreach (Type objType in assembly.GetTypes()) 
       { 
        //List<string> listInner = new List<string>(); 
        var listInner = new HashSet<string>(); 
        listInner.Add(objType.FullName); 
        foreach (MemberInfo obMember in objType.GetMembers()) 
        { 
         listInner.Add(obMember.MemberType + " " + obMember.ToString()); 

        } 
       }