[c#]呼び出し元メソッドの情報を取得する

VisualStudio2013ロゴ

C#で呼び出し元メソッドのメソッド名等を取得するには、次のクラスを利用します。

  • CallerFilePathAttribute クラス
  • CallerMemberNameAttribute クラス
  • CallerLineNumberAttribute クラス

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>
/// <param name="desc">詳細メッセージ</param>
/// <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などのシステム開発についても、多数の実績があります。ご相談は無料で承っておりますので、お気軽にお問い合わせください。


アプリ開発・Web開発のグッドテック(GoodTech) 白井理一朗 がお届けしました。 http://goodtech.co.jp/


皆様のご意見をお待ちしております。