ООК: из любопытства
Итак, в качестве небольшого упражнения и ради обучения я решил проверить, могу ли я реализовать очень простую рекурсивную функцию, которая будет возвращать List<int>
, но со следующими ограничениями:
1- Результат должен быть возвращен самой функцией (в отличие от передачи в качестве аргумента функции void
).
2 - В теле функции не объявлено локальных «именованных» переменных.
Я придумал решение ниже (кстати: можно ли это как-нибудь улучшить?)
При этом я узнал, что ToList()
- это не то же самое, что приведение к List<T>
(см. Пример ниже). Кто-нибудь может объяснить, что происходит под капотом и в чем разница между ними?
Спасибо!
PS - я использую версию 4.0 (на случай, если это имеет значение).
РЕДАКТИРОВАТЬ: ошибка времени выполнения Unable to cast object of type '<ConcatIterator>d__71'1[System.Int32]' to type 'System.Collections.Generic.List'1[System.Int32]'
public static List<int> SomeIntegers(int min, int max)
{
//assume max >= min for simplicity
if (min == max)
return new List<int>() { min };
// runtime error
//return (List<int>)(SomeIntegers(min, max - 1).Concat(new List<int>() { max }));
//works
return (SomeIntegers(min, max - 1).Concat(new List<int>() { max })).ToList();
}