Дело
Этим утром я реорганизовал некоторый метод ведения журнала, и мне нужно было изменить параметр метода 'params' в обычном массиве. Следовательно, вызов метода должен был измениться параметром массива. Я бы хотел, чтобы вызов метода менялся как можно реже, поскольку это широко используемый служебный метод.
Я предполагал, что смогу использовать инициализатор коллекции для вызова метода, но это дало мне ошибку компиляции. См. Второй вызов в примере ниже. Третий вызов тоже подойдет, но тоже приведет к ошибке.
Пример
void Main()
{
// This works.
object[] t1 = { 1, "A", 2d };
Test(t1);
// This does not work. Syntax error: Invalid expression term '{'.
Test({1, "A", 2d });
// This does not work. Syntax error: No best type found for implicitly-typed array.
Test(new[] { 1, "A", 2d });
// This works.
Test(new object[] { 1, "A", 2d });
}
void Test(object[] test)
{
Console.WriteLine(test);
}
Вопрос
- Есть ли способ вызвать
Test()
без предварительной инициализации массива?
new[] { "a", "b" }
в точности эквивалентенnew string[] { "a", "b" }
с точки зрения сгенерированного кода. Обратите внимание, чтоnew[]
не инициализатор коллекции - это просто обычный инициализатор массива с предполагаемым типом массива. - person Jon Skeet   schedule 24.03.2014params object[] args
раньше? - person aevitas   schedule 24.03.2014params object[] args
. Пришлось добавить параметр[CallerMemberName]string memberName = null
к сигнатуре метода для логирования. Поэтому использование params больше невозможно. - person Herman Cordes   schedule 24.03.2014