というクラスMyProgramがある場合、「MyProgram」を文字列として取得する方法はありますか?
というクラスMyProgramがある場合、「MyProgram」を文字列として取得する方法はありますか?
回答:
これを試して:
this.GetType().Namenameof演算子を使用できます。
                    私はこれをかなりの量のために捨てたかったのです。@micahtanの投稿方法が好ましいと思います。
typeof(MyProgram).Namenameof(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チェックがアクティブなときに警告が表示されます。