2013-04-30 101 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

相關問題