【问题标题】:How can I get filename of current working cs file and the name of the current class [duplicate]如何获取当前工作cs文件的文件名和当前类的名称[重复]
【发布时间】:2013-04-30 08:27:17
【问题描述】:

假设我正在处理 Welcome.cs 文件。在构造函数中,我想打印“欢迎”。但是,如果我将相同的代码放在 HelloWorld.cs 中,它应该会打印 HellowWorld。我该怎么做?

【问题讨论】:

  • 代码文件对您编译的应用程序没有影响。您可以在一个代码文件中拥有一个包含 10.000 个类的应用程序。
  • 您想要文件还是的名称?它们本质上是不同的,它们的任何共同点都只是约定俗成的。
  • @J.Steen:其实是类名。
  • @TimSchmelter 现在有框架方法可以做到这一点,所以我认为保留这个问题是可以的

标签: c#


【解决方案1】:

你可以试试

string thisFile = new System.Diagnostics.StackTrace(true).GetFrame(0).GetFileName(); 

【讨论】:

  • 这就是这样做的方法。请注意,true 表示包含调试信息。这仅适用于调试版本,它发出包含源信息的pdb 文件。
  • 如果 OP 没有被混淆,这就是这样做的方法。 =)
  • @harpo 所以这在生产构建中不起作用?
【解决方案2】:

如何打印

[当前文件名 - 方法名 - 行号] ?

private static void Log(string text,
                        [CallerFilePath] string file = "",
                        [CallerMemberName] string member = "",
                        [CallerLineNumber] int line = 0)
{
    Console.WriteLine("{0}_{1}({2}): {3}", Path.GetFileName(file), member, line, text);
}

测试:

Log("Test");

输出:

Program.cs_Main(11):测试

【讨论】:

    【解决方案3】:

    如果我理解正确,试试this.GetType().Name

    【讨论】:

    • 我们中的一个人没有正确理解。 OP 询问如何获取源文件名。
    • @harpo - 看看他的评论 - 看来他是认真的
    • 是的,我的意思是类名。我得到了答案。谢谢哥们
    【解决方案4】:

    试试这个来获取文件名:

    string currentFile = new System.Diagnostics.StackTrace(true).GetFrame(0).GetFileName(); 
    

    获取当前行:

    int currentLine = new System.Diagnostics.StackTrace(true).GetFrame(0).GetFileLineNumber(); 
    

    【讨论】:

      【解决方案5】:

      如果要获取类名,可以使用反射技术。

      例如:

      Type classType = yourObject.GetType();
      

      你可以从

      获取类名

      classType.Name

      【讨论】:

      • 很好的答案,但不幸的是这个答案已经存在。
      猜你喜欢
      • 2014-04-22
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 2016-03-08
      • 2012-05-23
      • 2012-12-21
      • 1970-01-01
      相关资源
      最近更新 更多