如何获取当前行号?

52 浏览
0 Comments

如何获取当前行号?

这里是我想要做的示例:

MessageBox.Show("Error line number " + CurrentLineNumber);

在上述代码中,CurrentLineNumber应该是该段代码源代码中的行号。

我该如何实现?

admin 更改状态以发布 2023年5月23日
0
0 Comments

使用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 命名空间中的CallerFilePathCallerMethodNameCallerLineNumber 特性。例如:

public void TraceMessage(string message,
        [CallerMemberName] string callingMethod = "",
        [CallerFilePath] string callingFilePath = "",
        [CallerLineNumber] int callingFileLineNumber = 0)
{
    // Write out message
}

参数必须是 string 类型的 CallerMemberNameCallerFilePath,以及 int 类型的 CallerLineNumber,并且必须具有默认值。在方法参数上指定这些特性,指示编译器在编译时在调用代码中插入适当的值,这意味着它适用于混淆。有关更多信息,请参见调用者信息

0
0 Comments

在.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],可以告诉您原始代码文件的路径。

0