Похоже, вы пришли из C ++.
Чтение .NET сбора мусора должно многое прояснить для вас.
В вашем случае вам не нужно «уничтожать» все дочерние списки. На самом деле, вы не можете даже уничтожить или утилизировать общий объект List обычным способом .NET. Если вы больше не хотите его использовать, просто удалите все ссылки на него. А фактическое уничтожение объекта будет выполнено сборщиком мусора (он же GC), когда посчитает нужным.
GC также очень умен, он будет обнаруживать циклические ссылки и a-> b-> c-> d объектные деревья и большинство вещей, которые вы могли бы найти, и очистить весь объектный граф должным образом. Так что вам не нужно создавать эту процедуру рекурсивной очистки.
Но учтите, что поведение GC является недетерминированным, т.е. вы не будете знать, когда произойдет фактическая «очистка», поэтому, если ваш список содержит некоторые важные ресурсы, которые должны быть немедленно освобождены, например, дескрипторы файлов, соединения с базой данных, тогда вам следует явно «избавьтесь» от него, как рекомендовано @lassevk.