Страницы

Поиск по вопросам

среда, 3 октября 2018 г.

__line__ номер линии кода

Не первый раз приходится писать
log1(613,"msg"); log1(614,"msg");
В с++ есть классная штука __LINE__ на www.cprogramming.com и с++ ф-ция логирования , есть ли простое решение для с# логирования именно строки, которая выполняется?


Ответ

Легко! Нужно воспользоваться «магическим» атрибутом [CallerLineNumber], который заставляет компилятор подставить номер строки.
Например, так:
using System.Runtime.CompilerServices;

static int GetLineNumber([CallerLineNumber] int line = -1) => line;
Пример использования:
class Program { static void Main(string[] args) { Console.WriteLine("Этот код находится в строке " + GetLineNumber()); }
static int GetLineNumber([CallerLineNumber] int line = -1) => line; }
В вашем случае я бы объявил функцию log1 так:
void log1(string message, [CallerLineNumber] int line = -1) { if (line != -1) { ... } }
и вызывал бы просто
log1("msg");

Другие магические атрибуты: [CallerMemberName] (очень полезен для реализации INotifyPropertyChanged!) и [CallerFilePath]

Комментариев нет:

Отправить комментарий