C#で呼び出し元メソッドの情報を取得する
C#では、呼び出し元メソッドの下記情報を簡単に取得することができます。
- ソースファイルの完全パス名(CallerFilePathAttribute)
- メソッド名(プロパティ名)(CallerMemberNameAttribute)
- ソースファイルの行番号(CallerLineNumberAttribute)
例えば、ログ出力をしたい場合などに利用できます。
取得できる内容
具体的に、下記のような結果を取得できます。
ソースファイルの完全パス名(CallerFilePathAttribute)
取得結果 : c:\work\project\goodtech\TestWebSystem\WebApplication1\WebApplication1\Controllers\ShopController.cs
呼び出し元メソッドを記載しているファイル名を取得します。
メソッド名(プロパティ名)(CallerMemberNameAttribute)
取得結果 : Index
呼び出し元メソッド名を取得します。
ソースファイルの行番号(CallerLineNumberAttribute)
取得結果 : 22
呼び出し元ファイルの呼び出した行の行数を取得します。
取得方法
取得方法は、メソッドの引数に下記属性を設定します。(3つともSystem.Runtime.CompilerServices 名前空間)
- ソースファイルの完全パス名の取得 : CallerFilePathAttribute
- メソッド名(プロパティ名) : CallerMemberNameAttribute
- ソースファイルの行番号 : CallerLineNumberAttribute
利用方法は下記サンプルのようになります。
/// <summary> /// 処理開始メッセージを登録する。 /// </summary> /// <param name="message">メッセージ /// <param name="desc">詳細メッセージ /// <param name="callerFilePath">呼び出し元ファイルパス</param> /// <param name="callerMemberName">呼び出し元メソッド名</param> /// <param name="callerLineNumber">呼び出し元ファイル行数</param> /// <returns>true:正常登録,false:出力レベル未満もしくはエラーにより登録できない</returns> public static bool Start(string message, string desc, [CallerFilePath] string callerFilePath = "", [CallerMemberName] string callerMemberName = "", [CallerLineNumber] int callerLineNumber = 0) { // ---------------< 処理開始メッセージを出力する。 > ・・・ }
注意点としては、下記となります。
- 出力する値は、コンパイル時の値となる。
- 属性を付けた引数に、デフォルト値を設定しておく。
- そのメソッドを呼び出したメソッドの情報を取得する。
呼び出すメソッド(例:Start メソッド)は、staticメソッドにしておく方が良いでしょう。
グッドテックでは、Visual Studio を利用したC#やAsp.NET、VB.NETなどのシステム開発についても、多数の実績があります。ご相談は無料で承っておりますので、お気軽にお問い合わせください。
[get_formcontact target=””]
コメント