というクラスMyProgram
がある場合、「MyProgram」を文字列として取得する方法はありますか?
というクラスMyProgram
がある場合、「MyProgram」を文字列として取得する方法はありますか?
回答:
これを試して:
this.GetType().Name
nameof
演算子を使用できます。
私はこれをかなりの量のために捨てたかったのです。@micahtanの投稿方法が好ましいと思います。
typeof(MyProgram).Name
nameof(MyProgram)
。
C#6.0では、次のnameof
演算子を使用できます。
nameof(MyProgram)
ミカタンの答えは良いですが、静的メソッドでは機能しません。現在のタイプの名前を取得したい場合、これはどこでも動作するはずです:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
参考までに、別のタイプを継承するタイプがある場合は、
this.GetType().BaseType.Name
派生クラスでこれが必要な場合は、そのコードを基本クラスに配置できます。
protected string GetThisClassName() { return this.GetType().Name; }
その後、派生クラスの名前に到達できます。派生クラス名を返します。もちろん、新しいキーワード「nameof」を使用する場合、このようなさまざまな行為は必要ありません。
さらに、これを定義することができます:
public static class Extension
{
public static string NameOf(this object o)
{
return o.GetType().Name;
}
}
そして、このように使用します:
public class MyProgram
{
string thisClassName;
public MyProgram()
{
this.thisClassName = this.NameOf();
}
}
これを使って
アプリケーションTest.exeが実行中で、関数がform1のfoo()であるとしましょう(基本的にはform1です)、上のコードは以下の応答を生成します。
string s1 = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name;
これは戻ります。
s1 = "TEST.form1"
関数名:
string s1 = System.Reflection.MethodBase.GetCurrentMethod().Name;
戻ります
s1 = foo
これを例外的に使用したい場合は注意してください:
catch (Exception ex)
{
MessageBox.Show(ex.StackTrace );
}
[Nullable(2)]
ため、nullチェックがアクティブなときに警告が表示されます。