我目前正在使用linq查询获取一个文件列表:
result = GetFiles(set.localPath)
.OrderByDescending(info => info.CreationTime)
.Take(set.latestImageStacksize)
.Select(file => file.FullName)
.ToList();
我正在尝试将这个列表堆叠到一个已经存在的堆栈中。我试着使用linq,但没有得到我想要的结果,所以我求助于:
for (int i = 0; i < set.latestImageStacksize; i++)
{
FilesToDisplay.Push(result[i]);
}
有没有更好的方法将上面的结果列表与堆栈合并?
发布于 2017-12-13 18:14:01
如果结果的类型为IEnumerable
,则可以执行以下操作:
result.ToList().ForEach(FilesToDisplay.Push);
如果它已经是一个List
,那么显然你不需要使用ToList()
。
发布于 2017-12-13 18:14:23
如果您经常这样做,那么可能值得为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);
发布于 2017-12-13 18:07:13
恐怕没有。您可以将这个“丑陋”的循环隐藏在另一个函数甚至扩展方法后面,以使其在外部看起来很漂亮,但其功能保持不变。
https://stackoverflow.com/questions/47790191
复制相似问题