2013-04-30 96 views
4

假设我正在使用Welcome.cs文件。在构造函数中,我想打印“欢迎”。但是,如果我将相同的代码放在HelloWorld.cs中,它应该打印HellowWorld。我怎么做?如何获取当前工作的cs文件的文件名和当前类的名称

+0

代码文件对已编译应用程序没有影响。您可以在一个代码文件中拥有一个包含10.000类的应用程序。 – Carsten 2013-04-30 08:28:49

+4

你想要**文件**或**类**的名称吗?它们有着根本性的不同,它们的共同之处仅在于惯例。 – 2013-04-30 08:29:51

+0

@ J.Steen:实际上是类名。 – user2039445 2013-04-30 08:31:40

回答

7

,如果我理解正确的话,尽量this.GetType().Name

+0

我们其中一个人没有正确理解。 OP询问如何获取源文件名。 – harpo 2013-04-30 08:29:23

+0

@harpo - 刚刚阅读他的评论 - 似乎他的意思是类 – NDJ 2013-04-30 08:32:18

+0

是的我的意思是类名。我得到了答案。谢谢你的朋友 – user2039445 2013-04-30 08:33:38

7

尝试使用此方法获取文件名:

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

为了得到当前行:

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

你可以试试

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

这是做到这一点的方法。请注意,“真”表示包含调试信息。这只适用于调试版本,它会发出包含源信息的'pdb'文件。 – harpo 2013-04-30 08:30:41

+1

如果OP没有被混淆,这就是做这件事的方法。 =) – 2013-04-30 08:32:57

4

如何打印

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

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):测试

0

如果你想要得到的类名,你可以使用反射技术。

如:

Type classType = yourObject.GetType(); 

你可以从

classType.Name获取类的名字

+0

很好的答案,但不幸的是,这个答案已经存在。 – user2039445 2013-04-30 08:37:46

相关问题