Не первый раз приходится писать
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]
Комментариев нет:
Отправить комментарий