2010-06-01 49 views
3

由於測試和時間測量,我必須在現有的C#Winforms項目中編寫某種日誌。用計數器替換代碼中的文本

我希望儘量減少修改應用程序,所以我我的限制問題計數數字替換文本:

我想傳遞一個行:

Log.WriteLine(position) 

多次在代碼然後用1到n之間的數字依次替換「位置」。

我不能在這種情況下使用計數器,因爲很多循環我沒有找到正確的位置。

+0

當你找到一個體面的解決方案時,你可以手動鍵入所有的數字。 – 2010-06-01 08:11:23

回答

2

Take a look at this

您可以檢索文件名和行號而不是計數器。

static private void Trace() 
{ 
    StackFrame callStack = new StackFrame(1, true); 
    Log.WriteLine(
     String.Format("At {0}:{1}", 
     callStack.GetFileName(), 
     callStack.GetFileLineNumber())); 
} 
+0

+1。我自己沒有嘗試過,但我認爲這需要你有.pdb文件可用。 – 2010-06-01 08:24:22

+0

工作正常,沒有「跳過一個框架」。 只是「新的StackFrame(真)」爲我做了! 謝謝! – Gpx 2010-06-01 08:54:27

1

我不明白你爲什麼認爲你不能使用這個計數器。如果您有深嵌套的循環和大量的if語句使得計算困難的位置值,當你想記錄它的麻煩,簡單地做這樣的事情

Log.WriteLine(position++) 

不會忘記你以前到零計數器需要使用它。

我希望我誤解了你的問題,所以你可能想澄清一下。

+0

我猜OP希望在每次運行中爲相同的位置打印*相同的數字。當存在循環時(迭代次數不同),您的建議將不起作用。 – 2010-06-01 08:13:47

+0

@ 0xA3:是的,我們猜測OP的要求,我發現這個問題很難理解,所以我的建議可能是廣泛的。 – 2010-06-01 08:22:50

+0

感謝您的想法,但我想知道代碼中的確切位置,如Stefans「行」的事情。在循環中像++一樣計數,每次回合都會獲得更高的值,但不是正確的位置。 – Gpx 2010-06-01 08:44:50

1

假設我正確地讀你的問題,我會寫一個簡單的腳本[插入你最喜歡的腳本語言]。

基本上寫你的代碼,然後用腳本做替代。

你可以做一個Perl的一個班輪類似perl -e open FILE, ">", "file.cs"; $i = 0; while(<INF>) { $_ ~= s/position/$i++/g; print $_; } > mynewfile.cs

這不是真正的perl的語法,很明顯,但本質上是這樣的想法。