我想知道是否有一个构建方法来删除并使用一个方法/命令返回列表的第一项。
我用过这个,不是很漂亮
Item currentItem = items.First();
items.RemoveAt(0);
所以我可以写一个扩展方法:
public static class ListExtensions
{
public static T RemoveAndReturnFirst<T>(this List<T> list)
{
T currentFirst = list.First();
list.RemoveAt(0);
return currentFirst;
}
}
//Example code
Item currentItem = items.RemoveAndReturnFirst();
这是最好的可能性还是有内置方法?
该列表是从nHibernate-Query返回的,因此它应该保持为List<T>
。
答案 0 :(得分:6)
此操作的最合适的集合是Queue:
var queue = new Queue<int>();
queue.Enqueue(10); //add first
queue.Enqueue(20); //add to the end
var first = queue.Dequeue(); //removes first and returns it (10)
队列使Enqueue
和Dequeue
操作非常快。但是,如果你需要在队列内搜索,或者按索引获取项目 - 这是一个糟糕的选择。比较一下,您有多少种不同类型的操作,并根据此选择最合适的集合 - 队列,堆栈,列表或简单数组。
您也可以从Queue
:
List
var list = new List<int>();
var queue = new Queue<int>(list);
答案 1 :(得分:3)
没有内置方法。你的代码对我来说很好。
一件小事,我会使用索引器,而不是First
扩展方法:
T currentFirst = list[0];
如果有Count > 0
,请检查您的列表。
public static T RemoveAndReturnFirst<T>(this List<T> list)
{
if (list == null || list.Count == 0)
{
// Instead of returning the default,
// an exception might be more compliant to the method signature.
return default(T);
}
T currentFirst = list[0];
list.RemoveAt(0);
return currentFirst;
}
如果你不得不担心并发性,我会建议使用另一种集合类型,因为这个不是线程安全的。