Ответ 1
Я считаю, что вы просто не можете объединить params
и необязательные параметры, которые требуются для CallerMemberName
. Лучшее, что вы можете сделать, это использовать фактический массив вместо params
.
Прямо сейчас (С# 4.0) наш метод ведения журнала выглядит как
public void Log(string methodName, string messageFormat, params object[] messageParameters)
где регистратор выполняет форматирование строки, чтобы вызывающий объект не помещал String.Format для создания приятного сообщения журнала (и позволяет журналу пропускать форматирование строки, если не подключен лог-просмотрщик).
С С# 5.0 я хотел бы избавиться от параметра methodName с помощью нового атрибута CallerMemberName, но я не вижу, как это можно комбинировать с ключевым словом params. Есть ли способ сделать это?
Я считаю, что вы просто не можете объединить params
и необязательные параметры, которые требуются для CallerMemberName
. Лучшее, что вы можете сделать, это использовать фактический массив вместо params
.
Вы можете сделать что-то вроде этого:
protected static object[] Args(params object[] args)
{
return args;
}
protected void Log(string message, object[] args = null, [CallerMemberName] string method = "")
{
// Log
}
Чтобы использовать журнал, выполните следующие действия:
Log("My formatted message a1 = {0}, a2 = {2}", Args(10, "Nice"));