【问题标题】:How do I pass line number to a method如何将行号传递给方法
【发布时间】:2014-03-16 02:12:24
【问题描述】:

在 Visual Stuido 2013 中,在 C# (.Net 4.5) 中工作,我如何将行号传递给方法调用。我记得在 C 语言中有一个 #pragma lineNumber 可以执行此操作,但根据这些术语进行搜索却一无所获。

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

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

我会这样称呼它

printResetStopwatch(#pragma lineNumber);

如果#pragma 是答案。

【问题讨论】:

  • 这回答了它。谢谢一堆。如果愿意,请将此推广为答案,以便我将其标记为已接受。
  • 这只是重复的内容。这个答案很容易找到。
  • 这对我来说并不容易。我看了几分钟也没找到。我使用了错误的术语,所以在这种情况下,s/o 自动搜索对我没有帮助。
  • 下次试试google。也可能使用 site:stackoverflow.com。 SO 的搜索非常幼稚,很浪费时间。

标签: debugging visual-studio-2013 line-numbers


【解决方案1】:

这样做的方法是使用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)

完整文档:http://msdn.microsoft.com/en-us/library/hh534540.aspx

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

【讨论】:

  • 请注意,这需要新的 C# 5 编译器和 .NET 4.5。您可以使用一些虚假属性,但您确实需要新的编译器。
猜你喜欢
  • 1970-01-01
  • 2023-02-22
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多