首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LINQ Concat to stack?

LINQ Concat to stack?
EN

Stack Overflow用户
提问于 2017-12-13 18:01:21
回答 3查看 151关注 0票数 0

我目前正在使用linq查询获取一个文件列表:

代码语言:javascript
运行
复制
result = GetFiles(set.localPath)
         .OrderByDescending(info => info.CreationTime)
         .Take(set.latestImageStacksize)
         .Select(file => file.FullName)
         .ToList();

我正在尝试将这个列表堆叠到一个已经存在的堆栈中。我试着使用linq,但没有得到我想要的结果,所以我求助于:

代码语言:javascript
运行
复制
for (int i = 0; i < set.latestImageStacksize; i++)
{
   FilesToDisplay.Push(result[i]);
}

有没有更好的方法将上面的结果列表与堆栈合并?

EN

回答 3

Stack Overflow用户

发布于 2017-12-13 18:14:01

如果结果的类型为IEnumerable,则可以执行以下操作:

代码语言:javascript
运行
复制
result.ToList().ForEach(FilesToDisplay.Push);

如果它已经是一个List,那么显然你不需要使用ToList()

票数 1
EN

Stack Overflow用户

发布于 2017-12-13 18:14:23

如果您经常这样做,那么可能值得为Stack编写一个扩展方法,如下所示:

代码语言:javascript
运行
复制
public static class StackExt
{
    public static void PushRange<T>(this Stack<T> stack, IEnumerable<T> range)
    {
        // Null checks elided for simplicity.

        foreach (var item in range)
            stack.Push(item);
    }
}

然后你就可以这样做了:

代码语言:javascript
运行
复制
FilesToDisplay.PushRange(result);

然而,如果你不打算经常这样做,你应该只使用你已经在使用的硬编码循环。应该谨慎使用扩展方法。

请注意,如果您正在创建一个新堆栈,而不是推送到现有堆栈上,则可以像这样创建新堆栈:

代码语言:javascript
运行
复制
var FilesToDisplay = new Stack<string>(result);
票数 1
EN

Stack Overflow用户

发布于 2017-12-13 18:07:13

恐怕没有。您可以将这个“丑陋”的循环隐藏在另一个函数甚至扩展方法后面,以使其在外部看起来很漂亮,但其功能保持不变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47790191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档