В С# существует ли способ преобразования массива в Stack <T> без цикла?

У меня есть следующий код, который дает мне Stack, содержащую иерархию папок пути:

var path = @"C:\Folder1\Folder2\Folder3\Folder4\Folder5\FileName.ext";

// String array with an element for each level
var folders = path.Split('\\');

var stack = new Stack<string>();

foreach(var folder in folders)
    stack.Push(folder);

var filename = stack.Pop(); // 'FileName.ext'
var parent = stack.Pop(); // 'Folder5'
var grandParent = stack.Pop(); // 'Folder4'

Просто из любопытства, есть ли более элегантный способ преобразования массива folders в Stack без цикла foreach? Что-то вроде (несуществующего) следующего:

var folders = path.Split('\\').Reverse().ToStack();

Я с нетерпением жду ваших предложений!

Ответ 2

Вы можете использовать

var stack = new Stack(folders);

Обратите внимание, что это все еще выполняет цикл, он просто делает это для вас.

Изменить: ваш код использует Stack, но ваш заголовок спрашивает о Stack<T>. Это неосновная версия. Сделайте свой ум вверх: p

Ответ 3

Если вам действительно нужен метод ToStack(), вы можете создать метод расширения:

public static class Extensions {
    public static Stack<T> ToStack(this IEnumerable<T> sequence) {
        return new Stack<T>(sequence);
    }
}

Или, как отмечали другие, вы можете использовать конструктор который принимает для него IEnumerable<T>.
Думаю, это вопрос личного предпочтения.