如果我有一个名为
MyProgram
的类,有没有办法以字符串形式检索“MyProgram”?
试试这个:
this.GetType().Name
为了更好的衡量,我想把这个扔掉。我认为@micahtan发布的方式是首选。
typeof(MyProgram).Name
虽然micahtan的答案很好,但它在静态方法中不起作用。如果你想检索当前类型的名称,这个应该可以在任何地方工作:
string className = MethodBase.GetCurrentMethod().DeclaringType.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();
}
}
供参考,如果您有一个继承自另一个类型的类型,您也可以使用
this.GetType().BaseType.Name
this
可以省略。获取当前类名所需要做的就是:
var className = GetType().Name
用这个
假设应用程序 Test.exe 正在运行,并且函数是 form1 中的 foo() [基本上是 class 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 );
}
这可以用于泛型类
类型(T).名称
获取Asp.net当前类名
string CurrentClass = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name.ToString();
最简单的方法是使用调用名称属性。但是,目前还没有属性类可以返回调用方法的类名或命名空间。
参见:CallerMemberNameAttributeClass
public void DoProcessing()
{
TraceMessage("Something happened.");
}
public void TraceMessage(string message,
[System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
[System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
[System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
System.Diagnostics.Trace.WriteLine("message: " + message);
System.Diagnostics.Trace.WriteLine("member name: " + memberName);
System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}
// Sample Output:
// message: Something happened.
// member name: DoProcessing
// source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
// source line number: 31