【发布时间】:2020-08-21 15:38:53
【问题描述】:
我相当对 C# 中的 LINQ 感到满意,但我不知道我的 foreach 循环是否导致过多枚举。
假设运行以下代码sn-p,
var listOfStuff = new List<CustomObject>
{
new CustomObject { Id = 1, Cost = 20M },
new CustomObject { Id = 2, Cost = 11M },
new CustomObject { Id = 3, Cost = 3.75M },
new CustomObject { Id = 4, Cost = 50.99M }
};
var newObjects = listOfStuff.Select(thing =>
new AnotherObject { Id = x.ID, NegaCost = decimal.Negate(x.Cost) });
foreach (var i in n) // a list of objects with a length of n
{
var match = newObjects.Where(PreDefinedPredicate);
i.DoSomethingWith(match);
}
是一个新的AnotherObject 实例被创建了 n 次还是我误解了多重枚举的概念?
【问题讨论】:
-
假设
DoSomethingWith迭代您的查询,然后在通过foreach的每个循环上是肯定的,您将创建一组新的AnotherObjects 进行过滤。为避免这种情况,您可以在输入foreach之前执行ToList。 -
是的,您正在多次实例化该对象,但仅在您枚举集合时,因此如果您需要对其进行水合,请使用
ToList- 啊,被打败了:( -
它在
i对象上执行的另一种方法中被枚举,但我假设同样会发生。谢谢! -
这很容易测试吗?
-
可能,但在我的辩护中,我是新来的
标签: c# linq enumeration deferred-execution