Я пытаюсь скрыть сложности в функциях, чтобы упростить вызов функций. Например, функция Log(string msg)
для ввода текстовых сообщений в элемент управления текстовыми полями, с новой строкой и Invoke() для многопоточности. Теперь я хочу избежать использования Log(string.Format("..{0}..", x, ...))
и написал версию Log(string format, params object[] args)
, которая отлично работает.Функция передачи C# с переменным списком аргументов в качестве аргумента
Пока мне не нужно, чтобы пройти этот LOG() в качестве аргумента другой функции, которую необходимо сделать каротаж:
AnotherFunction(Action<string, object[]> Log)
{
Log("formatstring", new object[] { value1, value2, ...});
}
Мой вопрос: как я могу избежать необходимости в код new object[]
строительства каждый раз, когда я должен Журнал вызовов()?
Я не верю, что можно, и это произошло бы в любом случае (массив создается из Params аргумента). Ваш единственный реальный вариант - иметь несколько перегрузок с различным количеством аргументов. –
Для этого нужно было бы определить тип Action, но ключевое слово 'params' доступно только в списках параметров функций, поэтому использование определения делегата, по-видимому, является единственным вариантом если вам нужен синтаксический сахар для переменной длины списка параметров. –
@JonnyDee: вместо синтаксического сахара я предпочитаю видеть делегатов как новый уровень сложности. С C это было бы проще. Возможно, менее сильный ввод текста, но, для меня, проще понять синтаксис. – Roland