LINQ Concat要堆叠吗?

时间:2017-12-13 10:01:21

标签: c# linq

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

result = GetFiles(set.localPath).OrderByDescending(info => 
info.CreationTime).Take(set.latestImageStacksize).Select(file => 
file.FullName);

我正在尝试将此列表堆叠到已存在的堆栈中。我尝试使用linq,但我没有得到我想要的结果,所以我采取了这个:

for (int i = 0; i < set.latestImageStacksize; i++)
{
   FilesToDisplay.Push(result[i]);
}

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

3 个答案:

答案 0 :(得分:1)

如果结果属于IEnumerable类型,那么您可以这样做:

result.ToList().ForEach(FilesToDisplay.Push);

如果它已经是List,那么显然你不必使用ToList()

答案 1 :(得分:1)

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

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);
    }
}

然后你会这样做:

FilesToDisplay.PushRange(result);

但是,如果您不打算这样做,您应该只使用您已经使用的硬编码循环。应该轻易使用扩展方法。

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

var FilesToDisplay = new Stack<string>(result);

答案 2 :(得分:0)

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