当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《c#从静态函数中打印类名》经验,为你挑选了4个好方法。

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

例如......

public class foo
{

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

}

Jamezor.. 55

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

    typeof(YourClass) - 快(0.043微秒)

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

    new StackFrame().GetMethod().DeclaringType - 最慢(17.2微秒)


如果使用typeof(YourClass)不合适,那么MethodBase.GetCurrentMethod().DeclaringType绝对是最好的选择.



1> Jamezor..:

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

    typeof(YourClass) - 快(0.043微秒)

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

    new StackFrame().GetMethod().DeclaringType - 最慢(17.2微秒)


如果使用typeof(YourClass)不合适,那么MethodBase.GetCurrentMethod().DeclaringType绝对是最好的选择.



2> Matt Hamilto..:
Console.WriteLine(new StackFrame().GetMethod().DeclaringType);


正如@Jamezor所指出的,这可能是一场表演的噩梦.干杯

3> Marc Gravell..:

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



4> Kent Boogaar..:

一个(更清洁,IMO)的替代方案(如果我在生产代码库中看到这个,我会很畏缩)

Console.WriteLine(MethodBase.GetCurrentMethod().DeclaringType);

顺便说一句,如果您正在为日志记录执行此操作,则某些日志记录框架(例如log4net)具有内置的功能.是的,他们在文档中警告您,这是一个潜在的性能噩梦.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有