如果我有一个名为MyProgram
的课程,有没有办法将“ MyProgram ”作为字符串检索?
答案 0 :(得分:611)
试试这个:
this.GetType().Name
答案 1 :(得分:194)
我想把它放在一边好好衡量。我认为@micahtan发布的方式是首选。
typeof(MyProgram).Name
答案 2 :(得分:146)
使用C#6.0,您可以使用nameof
运算符:
nameof(MyProgram)
答案 3 :(得分:118)
尽管micahtan的答案很好,但它不适用于静态方法。如果要检索当前类型的名称,这个名称应该可以在任何地方使用:
string className = MethodBase.GetCurrentMethod().DeclaringType.Name;
答案 4 :(得分:14)
作为参考,如果你有一个继承自另一个的类型,你也可以使用
this.GetType().BaseType.Name
答案 5 :(得分:10)
如果在派生类中需要它,可以将该代码放在基类中:
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();
}
}
答案 6 :(得分:8)
使用此
假设应用 Test.exe 正在运行, form1 中的功能 foo() [基本上它是类form1 < / em>],然后上面的代码将生成以下响应。
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 );
}
答案 7 :(得分:1)
获取Asp.net的当前类名
string CurrentClass = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.Name.ToString();
答案 8 :(得分:1)
MyProgram是一种类型,您可以这样做
typeof(MyProgram).Name
答案 9 :(得分:0)
this
可以省略。获取当前类名所需的只是:
GetType().Name
答案 10 :(得分:0)
这可以用于泛型类
typeof(T).Name
答案 11 :(得分:0)
最简单的方法是使用调用名称属性。但是,目前还没有返回调用方法的类名或命名空间的属性类。
见: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