14

我有以下代码,它给了我一个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循环的 a?类似于(不存在的)以下内容:

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

我期待您的建议!

4

4 回答 4

32

Stack<T>有一个接受的构造函数IEnumerable<T>

于 2012-12-19T10:53:15.127 回答
6

您可以使用

var stack = new Stack(folders);

请注意,这仍然执行循环,它只是为您执行。

编辑:您的代码使用 aStack但您的标题询问 a Stack<T>。这是非通用版本。下定决心:p

于 2012-12-19T10:54:15.713 回答
2

如果你真的想要一个ToStack()方法,你可以创建一个扩展方法:

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

或者,正如其他人所指出的,您可以使用接受IEnumerable<T>它的构造函数。
我想这是个人喜好的问题。

于 2012-12-19T10:55:42.080 回答
-4

只需将其替换var stack = new Stack<string>();var stack = new Stack<string>(folders);

于 2021-07-01T21:48:43.750 回答