2012-11-28 11 views
5

Mam funkcję, która pobiera wskaźnik funkcjiJak uzyskać nazwę funkcji ze wskaźnika funkcji w języku C#?

jak

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

Czy to możliwe, aby uzyskać nazwa funkcji bez uruchamiania go?

Wiem, że można uzyskać nazwę funkcji aktualnie uruchomionej funkcji, ale jak uzyskać nazwę funkcji, do której chcesz zadzwonić?

Wybacz jeśli takie pytanie mogło być wysłane wcześniej, nie mogę znaleźć rozwiązanie dla niego w C#

+1

Pamiętaj, że funkcje "anonimowe" mogą dostarczyć przydatnych informacji. Czy pomaga znać funkcję "nazwa" dla połączenia typu 'myfunc (x => x.Blah)'? – dlev

Odpowiedz

7

Można użyć MemberInfo.Name Property

string functionname = functionpointer.Method.Name; 
+0

Pod względem wydajności, jak duże byłoby to trafienie? Czy to jest ciężkie? –

+0

@BrijeshBharadwaj, jest to własność funkcji 'Func'. Myślę, że nie będzie wcale ciężki. Nawet jeśli wystąpi efekt wydajności w uzyskiwaniu dostępu do pobierającego, byłby on nieistotny. – Habib

+0

@BrijeshBharadwaj Myślę, że pierwsze pytanie powinno być, czy to naprawdę zwraca nazwę lub losową nazwę wygenerowaną przez kompilator. –

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

użyć refleksji

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()); 

        } 
       }