Логгинг с именами функций и номерами строк
От: BigBoss  
Дата: 10.08.17 20:07
Оценка:
Как известно, __LINE__, __FILE__ вместе с макро в C# не попали.
StackFrame медленный и вообще не должен компилироваться в native (не пробовал, но рефлексии там вроде нет).
К версии 4.5 появились System.Runtime.CompilerServices, но "в лоб" это тоже не работает. Вариации на тему

    void LogMessage(string format, object[] args,
        [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
        [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
        [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
    {
        string msg = string.Format(format, args);
        Console.WriteLine("{0} {1}:{2} '{3}'", sourceFilePath, memberName, sourceLineNumber, msg);
    }

компилируется, но естественно не так, как хотелось бы, аттрибуты на сопоставление параметров не влияют. Попробуйте сами

    LogMessage("Hello, world");
    LogMessage("Hello, {0}", "world");
    LogMessage("{0}, {1}", "Hello", "world");

А как (можно ли вообще) на C# написать функцию вроде LogMessage, но работающую и без черезмерного синтаксического оверхеда?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.