c#从静态函数中打印类名

TK.*_*TK. 29 c# static

是否可以在静态函数中打印类名?

例如......

public class foo
{

    static void printName()
    {
        // Print the class name e.g. foo
    }

}
Run Code Online (Sandbox Code Playgroud)

Jam*_*zor 55

您有三个选项可以YourClass在静态函数中获取该工作的类型(以及名称):

  1. typeof(YourClass) - 快(0.043微秒)

  2. MethodBase.GetCurrentMethod().DeclaringType - 慢(2.3微秒)

  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)

  • 正如@Jamezor所指出的,这可能是一场表演的噩梦.干杯 (5认同)

Mar*_*ell 11

虽然StackTrace的答案是正确的,但它们确实有开销.如果您只想安全地改变名称,请考虑typeof(foo).Name.由于静态方法不能是虚拟的,因此通常应该没问题.


Ken*_*art 6

一个(更清洁,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)