Re: Логгинг с именами функций и номерами строк
От: rameel https://github.com/rsdn/CodeJam
Дата: 10.08.17 22:49
Оценка:
Здравствуйте, BigBoss, Вы писали:

BB>К версии 4.5 появились System.Runtime.CompilerServices, но "в лоб" это тоже не работает.


Почему не работают и что значит в лоб?

  Скрытый текст
BB>
BB>    void LogMessage(string format, object[] args,
BB>        [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
BB>        [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
BB>        [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
BB>    {
BB>        string msg = string.Format(format, args);
BB>        Console.WriteLine("{0} {1}:{2} '{3}'", sourceFilePath, memberName, sourceLineNumber, msg);
BB>    }
BB>

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

Вот здесь не понял

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


Вот это у тебя вообще не скомпилируется

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


Воспользоваться например T4 и сгенерировать методы с нужным набором параметров, чтобы не создавать массив для args
void LogMessage(string format, object arg
void LogMessage(string format, object arg0, object arg1
void LogMessage(string format, object arg0, object arg1, object arg2
void LogMessage(string format, object arg0, object arg1, object arg2, object arg3
...
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.