2012-03-11 4 views
1

나는 방법이있다. 조건을 확인하고 싶습니다. 내 조건 결과가 true이면 새 예외가 발생합니다. 메시지 예외를위한 메서드의 이름을 지정해야합니다. 예 :방법의 메서드 이름을 얻는 방법

public void MyMethod(Notifier not) 
{ 
    if(not.HasValue()) 
     throw new Exception("MyMethod_name : " + not.Value); 
} 

메소드에서 메소드의 이름을 가져 오는 방법은 무엇입니까?

+2

[C#의 호출 된 함수에서 호출 함수 이름 가져 오기] (http://stackoverflow.com/questions/1310145/get-calling-function-name-from-called-function -in-c-sharp) –

+0

도 참조하십시오 http://stackoverflow.com/questions/44153/can-you-use-reflection-to-find-the-name-of-the-currently-exe cuting-method – kmote

+0

.net 4.5 베타 +를 사용하는 경우 [CallerInformation API] (http://msdn.microsoft.com/en-us/library/hh534540%28v=vs.110%29.aspx)를 사용할 수 있습니다. . –

답변

1

이 방법은 스택의 문제를 피할 수 호출자의 메서드 이름 대신.

0
public void MyMethod(Notifier not) 
{ 
    StackFrame stackFrame = new StackFrame(); 
    MethodBase methodBase = stackFrame.GetMethod(); 

    if(not.HasValue()) 
     throw new Exception("MyMethod_name : " + methodBase.Name); 
} 
0

리플렉션을 사용하면 메소드 이름을 가져올 수 있습니다 ..... 프레임 워크의 강력한 리플렉션 기능을 사용하여 메소드를 호출 할 수 있습니다. 여기에는 System.Reflection 네임 스페이스와 GetMethod 메서드가 포함됩니다.

은 반사의 구현을 위해,

http://www.dotnetperls.com/getmethod

2

이 당신이 찾고 무엇인가 ......이 링크에 대한 참조를 가지고?

그러나 다시 스택을 사용하면 오용되면 성능이 저하됩니다.

또는 당신이 찾고있는 - http://www.csharp-examples.net/get-method-names/

또는http://heifner.blogspot.co.nz/2006/12/logging-method-name-in-c.html

또는 여기 좀 좋은 참고가 - Get Calling function name from Called function

이 도움이 희망, 환호!

public void MyMethod(Notifier not) 
{ 
    if(not.HasValue()) 
    { 
     string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name; 
     throw new Exception(methodName + ": " + not.Value); 
    } 
} 

[그러나 때때로 예기치 않은 결과가있을 수 있습니다 : 예를 들어, 작은 메서드 나 속성은 종종 빌드 릴리스에서 인라인되는 경우 결과가 될 것입니다

관련 문제