有沒有辦法在C#的Console.WriteLine
函數中包含行號和文件名?如何包含行號和文件名Console.WriteLine輸出?
例如,在文件「myClass.cs」的行115我有聲明
Console.WriteLine("Hello world");
我想輸出是:
[myClass.cs][115]: Hello world
有沒有辦法在C#的Console.WriteLine
函數中包含行號和文件名?如何包含行號和文件名Console.WriteLine輸出?
例如,在文件「myClass.cs」的行115我有聲明
Console.WriteLine("Hello world");
我想輸出是:
[myClass.cs][115]: Hello world
如果您正在使用C#5,你可以使用caller information attributes做到這一點。例如:
using System;
using System.IO;
using System.Runtime.CompilerServices;
public class Test
{
static void Log(string message,
[CallerFilePath] string file = null,
[CallerLineNumber] int line = 0)
{
Console.WriteLine("{0} ({1}): {2}", Path.GetFileName(file), line, message);
}
static void Main()
{
Log("Hello, world");
Log("This is the next line");
}
}
輸出:
Test.cs (16): Hello, world
Test.cs (17): This is the next line
之前C#5,你堅持執行時堆棧檢查,這是由於內聯不太可靠,並依賴於信息處存在執行時間處理時間。 (它可能不是一個發佈版本,例如,而上面仍然可以工作。)
可以使用檢查StackTrace
this constructor,從中獲得StackFrame
,然後在StackFrame
上調用GetFileName()
和GetFileLineNumber()
。請注意,這將需要.pdb
文件隨應用程序一起提供。從鏈接
修改後的代碼:
using System.Diagnostics;
var StackTrace = new System.Diagnostics.StackTrace(true);
var StackFrame = StackTrace.GetFrame(0);
string FileName = StackFrame.GetFileName();
string LineNumber = StackFrame.GetFileLineNumber().ToString();
我想創建一個helper方法,這和利用是馬克Gravell在這篇文章中寫的解決方案: How do I get the current line number?
喜歡的東西...
public static class WriteLineHelper
{
public static void WriteLine(string message,
[CallerLineNumber] int lineNumber = 0,
[CallerMemberName] string caller = null)
{
Console.WriteLine(string.Format("[{0}][{1}] : {2}, caller, lineNumber, message);
}
}
然後在myClass.cs,只是更換調用Console.WriteLine:
WriteLineHelper.WriteLine("Hello world.");
......或者基本上,Jon Skeet說的。 – ScottMB
真的是你想要Ø utput像那樣? – Satpal
看看這裏:http://stackoverflow.com/questions/6369184/print-the-source-filename-and-linenumber-in-c-sharp – christiandev
你想修改Console.WriteLine行爲來做到這一點或你只想得到行號?對於行號,請檢查:http://stackoverflow.com/questions/4900744/is-there-a-way-to-get-the-current-line-number-when-executing-code-c-sharp – cvbarros