2012-03-11 6 views
1

私はメソッドを持っています。条件をチェックしたい場合は 、条件が真であれば新しい例外をスローします。 メッセージ例外のメソッドの名前を付ける必要があります。例:メソッドのメソッド名を取得する方法

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 beta +を使用している場合は、[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

Reflectionを使用すると、メソッド名を取得できます。フレームワーク内の強力なリフレクション機能を使用すると、メソッドを呼び出すことができます。これには、System.Reflection名前空間とGetMethodメソッドが含まれます。リフレクションの実装については

、このリンクへの参照を取る......

http://www.dotnetperls.com/getmethod

2

は、あなたが探しているものを、このですか?

new StackFrame(1, true).GetMethod().Name 

しかし、やはりスタックを使用して再生することは、誤用された場合、パフォーマンスヒットを意味します。

ORあなたはこのを探している - http://www.csharp-examples.net/get-method-names/

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

ORはここに素敵なノートを見て - 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); 
    } 
} 

[しかし、時折、予期しない結果があるかもしれないことに注意してください:例えば、小さなメソッドやプロパティは、多くの場合、リリースビルドでインライン化されている場合には、結果がなる

関連する問題