在相同的IEnumerable上调用Linq.Min会返回不同的结果

时间:2014-12-15 10:29:24

标签: c# linq extension-methods ienumerable min

我有一个奇怪的事情,minmin2在我调试时返回不同的值,有什么原因吗?

[TestMethod]
public void TestGroupingOfTimesAndDistances()
{
    // arrange
    ...
    var routes = network.GetNetworkRoutes(startPoint, endPoints); // this yields one at a time

    // act
    routes.ToBandings();
}

public static bool ToBandings(this IEnumerable<INetworkRoute> enumerable)
{
    var min = enumerable.Min(nr => nr.Value.Distance);
    var min2 = enumerable.Min(nr => nr.Value.Distance);
    return true;
}

如果这很重要,我将从MS Test Runner运行此代码。框架4.5,使用VS 2013。

1 个答案:

答案 0 :(得分:3)

如果enumerable在通话之间发生变化,可能会发生这种情况。似乎GetNetworkRoutes使用延迟评估来返回结果。这就是为什么每次在其上调用Min方法时都会枚举其结果的原因。所以第二个返回不同的结果,这就是min的原因。你得到的价值是不同的。如果您想阻止此方法使用ToListToArray方法来实现结果。并将其传递给您的方法。