Ответ 1
Stack<T>
имеет конструктор который принимает IEnumerable<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();
Я с нетерпением жду ваших предложений!
Stack<T>
имеет конструктор который принимает IEnumerable<T>
Вы можете использовать
var stack = new Stack(folders);
Обратите внимание, что это все еще выполняет цикл, он просто делает это для вас.
Изменить: ваш код использует Stack
, но ваш заголовок спрашивает о Stack<T>
. Это неосновная версия. Сделайте свой ум вверх: p
Если вам действительно нужен метод ToStack()
, вы можете создать метод расширения:
public static class Extensions {
public static Stack<T> ToStack(this IEnumerable<T> sequence) {
return new Stack<T>(sequence);
}
}
Или, как отмечали другие, вы можете использовать конструктор который принимает для него IEnumerable<T>
.
Думаю, это вопрос личного предпочтения.