Я пытаюсь написать функцию, которая заполняет строки содержимым массива или устанавливает их в null. Количество строк может меняться, и я не хочу добавлять такие требования, как все они являются частью одного и того же массива или класса.Обрабатывать переменное количество выходных параметров с меньшим дублированием кода в C#
В C# вы не можете комбинировать 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 ....
Как избежать всего этого дублирования кода, в идеале принимающего произвольное количество параметров?
Edit: Это полезно, потому что вы могли бы сделать, скажем, 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 Балаш для ответа, в частности, намек, что это называется «массив деструктурирующий». Как они указывают, и, как утверждает этот вопрос, не представляется возможным в текущей версии C#: Destructuring assignment - object properties to variables in C#
Что не так с общедоступной строкой [] ParseRemainders (string [] остатки)? – AndyJ
Рассмотрите возможность использования возвращаемого типа IEnumerable и не используйте его. –
EluciusFTW
Я действительно не понимаю, почему люди агрессивно сбрасывают все начинающие вопросы. Что случилось с этим? –