是否可以在静态函数中打印类名?
例如......
public class foo
{
static void printName()
{
// Print the class name e.g. foo
}
}
Run Code Online (Sandbox Code Playgroud)
Jam*_*zor 55
您有三个选项可以YourClass在静态函数中获取该工作的类型(以及名称):
typeof(YourClass) - 快(0.043微秒)
MethodBase.GetCurrentMethod().DeclaringType - 慢(2.3微秒)
new StackFrame().GetMethod().DeclaringType - 最慢(17.2微秒)
如果使用typeof(YourClass)不合适,那么MethodBase.GetCurrentMethod().DeclaringType绝对是最好的选择.
Mat*_*ton 21
Console.WriteLine(new StackFrame().GetMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)
一个(更清洁,IMO)的替代方案(如果我在生产代码库中看到这个,我会很畏缩)
Console.WriteLine(MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果您正在为日志记录执行此操作,则某些日志记录框架(例如log4net)具有内置的功能.是的,他们在文档中警告您,这是一个潜在的性能噩梦.
小智 5
从 C# 6.0 开始,存在一种更简单、更快速的方法来获取字符串形式的类型名称,而无需在代码中键入字符串文字,使用关键字nameof:
public class Foo
{
static void PrintName()
{
string className = nameof(Foo);
...
}
}
Run Code Online (Sandbox Code Playgroud)