如何获取当前行号?
如何获取当前行号?
这里是我想要做的示例:
MessageBox.Show("Error line number " + CurrentLineNumber);
在上述代码中,CurrentLineNumber
应该是该段代码源代码中的行号。
我该如何实现?
admin 更改状态以发布 2023年5月23日
使用StackFrame.GetFileLineNumber方法,例如:
private static void ReportError(string message) { StackFrame callStack = new StackFrame(1, true); MessageBox.Show("Error: " + message + ", File: " + callStack.GetFileName() + ", Line: " + callStack.GetFileLineNumber()); }
有关更多信息,请参见Scott Hanselman的博客文章。
[编辑:添加以下内容]
对于使用 .NET 4.5 或更高版本的用户,考虑使用System.Runtime.CompilerServices 命名空间中的CallerFilePath、CallerMethodName 和 CallerLineNumber 特性。例如:
public void TraceMessage(string message, [CallerMemberName] string callingMethod = "", [CallerFilePath] string callingFilePath = "", [CallerLineNumber] int callingFileLineNumber = 0) { // Write out message }
参数必须是 string
类型的 CallerMemberName
和 CallerFilePath
,以及 int
类型的 CallerLineNumber
,并且必须具有默认值。在方法参数上指定这些特性,指示编译器在编译时在调用代码中插入适当的值,这意味着它适用于混淆。有关更多信息,请参见调用者信息。
在.NET 4.5 / C# 5中,您可以撰写一个使用新的调用方属性的实用方法,让编译器为您完成这项工作:
using System.Runtime.CompilerServices; static void SomeMethodSomewhere() { ShowMessage("Boo"); } ... static void ShowMessage(string message, [CallerLineNumber] int lineNumber = 0, [CallerMemberName] string caller = null) { MessageBox.Show(message + " at line " + lineNumber + " (" + caller + ")"); }
例如,这将显示:
Boo在第39行(SomeMethodSomewhere)
还有 [CallerFilePath]
,可以告诉您原始代码文件的路径。