Объединение CallerMemberName с параметрами - программирование
Подтвердить что ты не робот

Объединение CallerMemberName с параметрами

Прямо сейчас (С# 4.0) наш метод ведения журнала выглядит как

public void Log(string methodName, string messageFormat, params object[] messageParameters)

где регистратор выполняет форматирование строки, чтобы вызывающий объект не помещал String.Format для создания приятного сообщения журнала (и позволяет журналу пропускать форматирование строки, если не подключен лог-просмотрщик).

С С# 5.0 я хотел бы избавиться от параметра methodName с помощью нового атрибута CallerMemberName, но я не вижу, как это можно комбинировать с ключевым словом params. Есть ли способ сделать это?

4b9b3361

Ответ 1

Я считаю, что вы просто не можете объединить params и необязательные параметры, которые требуются для CallerMemberName. Лучшее, что вы можете сделать, это использовать фактический массив вместо params.

Ответ 2

Вы можете сделать что-то вроде этого:

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"));