Ну, у меня есть шаблон, который я использовал в некоторых случаях, и я хотел показать его в качестве опции. Тем не менее, мой мозг был немного раздражен, когда я пытался справиться с этим, как написано, поэтому вместо этого мы пришли к соглашению (мой мозг и я), что мы просто придумаем простую версию, чтобы показать вам.
Возможно, это даже не совсем применимо к вашему конкретному вопросу, но это один из способов, которым я пользовался в прошлом, когда хотел, чтобы все было сделано не изменяемым образом, что, казалось, было тем, что вы искали.
public string IntCSVReverse(List<int> IntList)
{
return IntCSVReverse_recurse(IntList, 0);
}
private string IntCSVReverse_recurse(List<int> IntList, int Index)
{
if (Index == (IntList.Count - 1))
return IntList[Index].ToString();
else
return
IntCSVReverse_recurse(IntList, Index + 1)
+ "," + IntList[Index].ToString();
}
Итак, существует закономерность того, чего она стоит. Это не XML, это не ветвление, но это краткий пример того, когда немутирующая рекурсия проста для реализации и более понятна (для меня), чем пытаться реализовать ту же самую вещь, скажем, мутируя StringBuilder
,
Действительно, ваш конкретный пример выглядит лучше (мне) как двухэтапное решение с одним возвращаемым значением List, созданным в начале. :)