我试图为了比较目的而复制一个枚举,因为将一个枚举分配给另一个枚举只会创建引用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()
。这些都实现了查询。诸如Where
和Select
之类的LINQ运算符在可能的地方都比较懒惰-他们了解原始集合,并且仅在需要时处理数据。
当然,通过调用ToList
/ ToArray
,您可以删除对Select
的调用,因为它基本上是无操作的。