Как передать номер строки методу
В 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.