2016-06-29 8 views
19

찾아 보거나 검색했지만 기대 한 바가 없습니다.nameof를 사용하여 현재 메서드의 이름을 얻습니다.

어쨌든 nameof 메서드 이름을 지정하는 사용하여 현재 메서드 이름을 얻으려면 C# 6.0 있습니까?

나는이 같은 사전에 내 테스트 결과를 추가하고 :

Results.Add(nameof(Process_AddingTwoConsents_ThreeExpectedRowsAreWrittenToStream), result); 
나는 내가 선을 붙여 + 복사 할 수 있습니다 명시 적으로 메소드 이름을 지정하지 않았을 경우 내가 선호

, 비 작업 예제 :

Results.Add(nameof(this.GetExecutingMethod()), result); 

가능하면 Reflection을 사용하고 싶지 않습니다.

UPDATE

(제안)이 아닌 this question의 중복. 나는 현재 메서드 이름을 얻기 위해 (!) reflection을 사용하지 않고 nameof을 명시 적으로 사용할 수 있는지 묻는다.

Results.Add(new StackTrace().GetFrame(0).GetMethod().Name, result);  
+1

그리고 왜 이것을 사용하지 마십시오 : http://stackoverflow.com/questions/44153/can-you-use-reflection-to-find-the-name-of-the-currently-executing-method? – HimBromBeere

+0

'StackTrace'를 사용하면 정보를 얻을 수 있지만 느립니다. 자동으로 무언가를 이루려면 코드 생성 (예 : 컴파일러로 실행되어 다른 것으로 대체되는 도구) 또는 AOP ([this] (http://stackoverflow.com/q/25803/1997232) 참조)를 사용할 수 있습니다. – Sinatr

+0

그렇지 않습니까? 'System.Reflection.MethodInfo.GetCurrentMethod(). Name ' – Zorkind

답변

47

당신은 nameof을 사용할 수 없습니다

StackTrace sTrace= new StackTrace(); 
StackFrame sFrame= sTrace.GetFrame(0); 
MethodBase currentMethodName = sFrame.GetMethod(); 
Results.Add(currentMethodName.Name, result); 

또는 당신은 사용할 수 있습니다 : 당신이 결과 목록에 현재 메소드의 이름을 추가 할 경우

+0

왜 다운 투표입니까? – user3185569

+0

어떻게 도움이됩니까? 'GetCaller' 호출자가 아니라 실행 메소드의 호출자가 필요합니다. 이 작업을 솔직히, 끔찍한 짓을하기 위해 * 모든 * 잠재적으로 호출 할 수있는 메서드에 선택적 매개 변수를 추가 할 것을 제안하지 않는 한. – InBetween

+2

@InBetween OP에서 "현재 메소드 이름을 얻습니다"라고 명시했습니다. 이것은 정확히 그가 말한 것입니다! 현재 실행중인 메소드 이름을 얻기 위해 어디에서나 호출 할 수있는 하나의'GetCaller' 메소드 만 있으면됩니다. – user3185569

0

당신은이를 사용할 수 있습니다 이를 해결하는 방법은 다음과 같습니다.

다음은 직접 반사를 사용하지 않으며 (단지 nameof과 같음) expli는 사용하지 않습니다. cit 메소드 이름.

Results.Add(GetCaller(), result); 

public static string GetCaller([CallerMemberName] string caller = null) 
{ 
    return caller; 
} 

GetCaller 그것을 호출하는 메소드의 이름을 반환합니다.

+3

메서드가 인라인 될 수 있으므로 신뢰할 수없는 것입니다. 나는 또한 그것이 꽤 느릴 것이라고 기대할 것이다. – svick

+0

일반적으로 프로덕션 코드 –

+1

에서 이러한 클래스를 사용하지 말아야합니다.'System.Reflection.MethodInfo.GetCurrentMethod()는 더 쉽고 빠르게 처리 할 것입니다. – GreatAndPowerfulOz