2012-11-28 3 views
5

나는 그것을 실행하지 않고 함수의 이름을 가져C#의 함수 포인터에서 함수 이름을 가져 오는 방법은 무엇입니까?

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

같은 함수 포인터

소요가 가능 기능이?

현재 실행중인 함수의 함수 이름을 얻을 수 있지만 함수 호출에 사용할 함수 이름을 어떻게 알 수 있습니까? 이러한 질문은 이전에 게시되었을 수 있습니다 경우

것은 내가

+1

"익명"기능은 유용한 정보를 제공 할 수 있습니다. 'myfunc (x => x.Blah)'와 같은 호출의 "name"함수를 아는 것이 도움이됩니까? – dlev

답변

7

당신은 MemberInfo.Name Property

string functionname = functionpointer.Method.Name; 
+0

성능 측면에서 볼 때 얼마나 큰 타격입니까? 무거워? –

+0

@BrijeshBharadwaj는 'Func' 함수의 속성입니다. 그것은 무겁지 않을 것입니다, 나는 믿습니다. getter에 액세스 할 때 성능 효과가 있더라도 무시할 수 있습니다. – Habib

+0

@BrijeshBharadwaj 나는 첫번째 질문이 있어야한다고 생각한다. 이것은 정말로 원하는 이름이나 컴파일러에 의해 생성 된 임의의 이름을 반환한다. –

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

사용 반사

을 사용할 수 있습니다 C#에서 이에 대한 해결책을 찾을 수없는, 용서
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()); 

        } 
       } 
관련 문제