C#HashSet中是否有Pop()等价物

时间:2017-11-07 09:59:10

标签: c#

如果我有一个非空的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中取出一些物品,让它进一步使用并且不给人留下印象,它必须是第一个或最后一个或者任何项目,但更清楚的是,此时可以选择任何项目。

1 个答案:

答案 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;
    }
}