我试图为了比较目的而复制一个枚举,因为将一个枚举分配给另一个枚举只会创建引用a,因此第二个枚举会像第一个一样更改。我最初以为使用linq Select会创建第二个可枚举的对象,但是很惊讶地发现它最终只是通过引用而结束。

逻辑本身用于确定标签列表是否包含针对特定显示场景的相同事件,并且代码如下所示。

IEnumerable<Event> lastevents = null;
foreach (var tag in tags)
{
    IEnumerable<Event> thisevents = events.Where(e => e.Tags.Contains(tag));
    if (lastevents != null)
    {
        foreach (var item in thisevents)
        {
            if (!lastevents.Contains(item))
                return true;
        }
    }
    lastevents = thisevents.Select(e => e);
}


在这种情况下,复制枚举的最佳方法是什么?

最佳答案

最简单的方法是调用ToList()ToArray()。这些都实现了查询。诸如WhereSelect之类的LINQ运算符在可能的地方都比较懒惰-他们了解原始集合,并且仅在需要时处理数据。

当然,通过调用ToList / ToArray,您可以删除对Select的调用,因为它基本上是无操作的。

09-28 01:53