我目前正在使用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]);
}
有没有更好的方法将上面的结果列表与堆栈合并?
答案 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)
我担心没有。您可以隐藏另一个函数或甚至扩展方法后面的“丑陋”循环,使其在外部看起来很漂亮,但功能保持不变。