如果我有一个非空的HashSet<T> items
,那么这两行是否有任何捷径:
T item = items.First(); // this can be any item, it does not have to be the first one
items.Remove(item);
我认为T item = items.Pop()
对此是一个合适的功能,但它不存在。
我知道,使用这两行或写一个扩展方法没什么大不了的,但我不知何故预计会有一个内置的Pop()
- 函数,它不依赖于First()
。
编辑:
由于对First()
存在一些疑惑:我绝对不关心从HashSet
弹出哪个项目,所以items.Last()
也适合我。
关于使用First()
的这种混淆是我正在讨论的问题:即使我评论它,阅读代码导致假设,使用First()
(不是)有点重要。
所以要澄清一下:我想知道,如果有正确的方法,从HashSet
中取出一些物品,让它进一步使用并且不给人留下印象,它必须是第一个或最后一个或者任何项目,但更清楚的是,此时可以选择任何项目。
答案 0 :(得分:4)
这是一个优雅的解决方案(我使用了列表,但您可以使用hashset而不是它):
class Program
{
static void Main(string[] args)
{
List<object> items = new List<object>();
//code to fill the list...
object item = items.RemoveFirst();
}
}
static class Extensions
{
public static T RemoveFirst<T>(this ICollection<T> items)
{
T item = items.FirstOrDefault();
if (item != null)
{
items.Remove(item);
}
return item;
}
}