Как передать номер строки методу

В 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.

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

Примечание: для этого требуется компилятор C# 5.0, который включен в VS 2013.

Другие вопросы по тегам