HOWTO · Csharp

C# で現在のメソッド名を取得する

この記事では、C# で実行されている現在のメソッド名を取得する方法を学習します。

このページの内容

この記事では、C# を利用して現在実行中のメソッドの名前を取得する方法を学習します。 C# では、現在実行中のメソッドの名前を取得する方法が複数あります。

同様に動作する次の手順の概要を説明し、説明し、実行します。

C# で MethodBase.GetCurrentMethod() を使用して現在のメソッド名を取得する

現在のメソッドを表すには、MethodBase オブジェクトを使用する必要があります。

実行中のメソッド内から GetCurrentMethod() を使用して、現在のメソッドに関する情報を取得することができます。 MethodBase.GetCurrentMethod() 関数を使用して、現在実行中のメソッドを反映する MethodBase オブジェクトを取得できます。

まず、ライブラリをインポートして、後でコードで使用される関数にアクセスできるようにします。

using System;
using System.Diagnostics;
using System.Reflection;

次に、Main メソッド内で、GetCurrentMethod() 関数を使用して現在のメソッドの名前を確認する文字列型変数を初期化します。 そして、コンソールに関数名を出力します。

string getName = MethodBase.GetCurrentMethod().Name;
Console.WriteLine("Current method is " + getName);

ソースコード:

using System;
using System.Diagnostics;
using System.Reflection;

class CurrentMethodName {
  public static void Main() {
    string getName = MethodBase.GetCurrentMethod().Name;
    Console.WriteLine("Current method is " + getName);
  }
}

出力:

Current method is Main

GetCurrentMethod で指定された MethodInfo は、現在実行中のメソッドがジェネリック型で定義されている場合、ジェネリック型定義から派生します (MethodBase.ContainsGenericParameters は true を返します)。 したがって、メソッドが呼び出されたときにメソッドに渡されたパラメーターの型を表していません。

GetCurrentMethod は、現在実行中のメソッドがジェネリックである場合、ジェネリック メソッドの説明を返します。 ジェネリック型にジェネリック メソッドが指定されている場合は、そのジェネリック型の指定から MethodInfo を受け取ります。

C# で Reflection を使用して現在のメソッド名を取得する

リフレクションは、手始めの簡単な方法かもしれません。 reflection 名前空間は MethodBase クラスを提供し、GetCurrentMethod を公開してメソッド情報を取得します。

System.Reflection.MethodBase.GetCurrentMethod().Name;

Reflection メソッドのソース コード全体を次に示します。

ソースコード:

using System;

class CurrentMethodName {
  private static void Main(string[] args) {
    var getName = System.Reflection.MethodBase.GetCurrentMethod().Name;
    Console.WriteLine("Current method is " + getName);
  }
}

出力:

Current method is Main
Note
これは、非同期メソッドで機能します。

C# の StackTrace クラスで現在のメソッド名を取得する

メソッドの名前を取得する別のオプションは、StackTrace メソッドとスタック フレームを使用してメソッド情報をフェッチすることです。 メソッドの名前は、StackTrace GetFrame() 関数によって返されるフレームのプロパティ GetMethod() を通じて取得できます。

まず、ライブラリをインポートして、コード内の StackTrace クラスにアクセスします。

using System;
using System.Diagnostics;

stackTrace という変数に StackTrace オブジェクトを設定し、そのオブジェクトを Main() 関数で使用します。 StackTrace を介して GetFrame 関数でフレームを取得する変数 getFrame を作成します。

getName という変数を作成し、GetMethod クラスの Name 属性を使用してアクティブなメソッドの名前を取得する責任を割り当てます。

var stackTrace = new StackTrace();
var getFrame = stackTrace.GetFrame(0);
var getName = getFrame.GetMethod().Name;

ソースコード:

using System;
using System.Diagnostics;

class CurrentMethodName {
  private static void Main(string[] args) {
    var stackTrace = new StackTrace();
    var getFrame = stackTrace.GetFrame(0);
    var getName = getFrame.GetMethod().Name;
    Console.WriteLine("Current method is " + getName);
  }
}

出力:

Current method is Main

C# で nameof 演算子を使用して現在のメソッド名を取得する

nameof キーワードを式で使用すると、文字列定数が変数、型、またはメンバーの名前に設定されます。 nameof 式は、ビルド時にのみ評価されるため、実行時には効果がありません。

nameof と呼ばれる式を使用して、引数をチェックするためのコードを保守しやすくすることができます。

このアプローチは、次を使用しない組み込みキーワードに基づいています。

  1. reflection 名前空間をアタッチする using ステートメントの場合、using System.Diagnostics; をアタッチする必要はありません。 および System.Reflection を使用;
  2. 既存のコードを反映する追加のクラス。

ソースコード:

using System;

class CurrentMethodName {
  private static void Unique() {
    string name = nameof(Unique);

    Console.WriteLine("Current method is " + name);
  }

  public static void Main(string[] args) {
    Unique();
  }
}

出力:

Current method is Unique
Note
nameof 演算子は、C# バージョン 6 以降で使用できます。