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=””]
コメント