Debugging 如何将行号传递给方法

Debugging 如何将行号传递给方法,debugging,visual-studio-2013,line-numbers,Debugging,Visual Studio 2013,Line Numbers,在Visual Stuido 2013中,在C#(.Net 4.5)中,如何将行号传递给方法调用。我记得在C语言中有一个#pragma行号来实现这一点,但搜索这些术语却一无所获 我想写一个类似这样的方法: // unchecked code: private void printResetStopwatch(int lineNumber) { stopwatch.stop(); System.Console.WriteLine(stopwatch.Elapsed.ToString()

在Visual Stuido 2013中,在C#(.Net 4.5)中,如何将行号传递给方法调用。我记得在C语言中有一个#pragma行号来实现这一点,但搜索这些术语却一无所获

我想写一个类似这样的方法:

// unchecked code:
private void printResetStopwatch(int lineNumber)
{
   stopwatch.stop();
   System.Console.WriteLine(stopwatch.Elapsed.ToString() + " at line " + lineNumber.ToString();
}
我会称之为

printResetStopwatch(#pragma lineNumber);

如果#pragma是答案。

执行此操作的方法是使用
CallerLineNumberAttribute
在方法上赋予参数属性,并为其提供默认值。然后,C#将用呼叫者的行号填充它

void Method(string message, [CallerLineNumber] int lineNumber = 0) { 
  ...
}

Method("foo");  // C# will insert the line number here 
请注意,这里实际上有一组相关属性可能会引起您的兴趣。这是一个样本

public void TraceMessage(string message,
        [CallerMemberName] string memberName = "",
        [CallerFilePath] string sourceFilePath = "",
        [CallerLineNumber] int sourceLineNumber = 0)
完整文档:


注:这需要VS 2013中包含的C#5.0编译器

这就是答案。非常感谢。如果你愿意的话,可以把它推广成一个答案,这样我就可以把它标记为已接受。它只是重复的内容。这个答案很容易找到,对我来说并不容易。我看了好几分钟都没找到。我使用了错误的术语,所以s/o autosearch在这个案例中对我没有帮助。下次试试谷歌。可能也在使用网站:stackoverflow.com。因此,SO的搜索非常幼稚,耗费大量时间。请注意,这需要新的C#5编译器和.NET4.5。您可以使用一些伪属性,但确实需要新的编译器。