Я пытаюсь написать функцию, которая заполняет строки содержимым массива или устанавливает их в null. Количество строк может меняться, и я не хочу добавлять такие требования, как все они являются частью одного и того же массива или класса.
В С# вы не можете объединить param
и out
. Поэтому единственный способ сделать это - перегрузить метод следующим образом:
public void ParseRemainders(string[] remainders, out string p1)
{
p1 = null;
if ((remainders != null) && (remainders.Length > 0))
p1 = remainders[0];
}
public void ParseRemainders(string[] remainders, out string p1, out string p2)
{
p1 = null;
p2 = null;
if (remainders != null)
{
ParseRemainders(remainders, out p1);
if (remainders.Length > 1)
p2 = remainders[1];
}
}
public void ParseRemainders(string[] remainders, out string p1, out string p2, out string p3)
{
p1 = null;
p2 = null;
p3 = null;
if (remainders != null)
{
ParseRemainders(remainders, out p1, out p2);
if (remainders.Length > 2)
p3 = remainders[2];
}
}
.... and on forever ....
Как я могу избежать всего этого дублирования кода, в идеале принимающего произвольное количество параметров?
Изменить: Это полезно, потому что вы могли бы сделать, скажем, ParseRemainders(remainders, out inputFileName, out outputFileName, out configFileName)
, а затем не нужно вручную делать
if (remainder.Length > 0) inputFileName = remainder[0];
if (remainder.Length > 1) outputFileName = remainder[1];
if (remainder.Length > 2) configFileName = remainder[2];
...
Извините, если это было неясно, у меня была конкретная цель в виду, почему я не просто вернул List<>
.
Заключение: Благодаря Botond Balázs для ответа, в частности, намек на то, что это называется "разрушение массива". Как они отмечают, и по мере того, как этот вопрос подтверждает, в текущей версии С# невозможно: Назначение разрушения - свойства объекта для переменных в С#