在C#中,有没有办法将数组转换为Stack <T>而不进行循环?

Mar*_*ell 11 .net c# c#-4.0

我有以下代码,它给了我一个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'
Run Code Online (Sandbox Code Playgroud)

出于好奇,是否有更优雅的方式将folders数组转换为Stackforeach循环?类似于(不存在的)以下内容:

var folders = path.Split('\\').Reverse().ToStack();
Run Code Online (Sandbox Code Playgroud)

我期待着您的建议!

Jak*_*cki 25

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

  • 和非通用版本一样.它接受一个`ICollection`. (6认同)

Raw*_*ing 5

您可以使用

var stack = new Stack(folders);
Run Code Online (Sandbox Code Playgroud)

请注意,这仍然执行循环,它只是为你做.

编辑:您的代码使用Stack但您的标题询问a Stack<T>.这是非通用版本.提醒你:p