2014-12-15 3 views
-1

디버깅하는 동안 minmin2이 다른 값을 반환하는 이유는 무엇입니까?동일한 IEnumerable에서 Linq.Min을 호출하면 다른 결과가 반환됩니다.

[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에서이 코드를 실행하는 것이 중요합니다. Framework 4.5, using VS 2013.

+3

이 코드를 재생산하는 데 필요한 전체 코드를 제공 할 수 있습니까? –

+1

"DB에서 오는 것"은 실제로 우리에게별로 알려주지 않습니다. 이미'List '이나 그와 비슷한 것을 가져 왔습니까? 더 많은 상황을 알려주십시오. * 일반적으로 * 많은 구현에서 그렇지만 반복 할 때마다 IEnumerable 이 동일한 결과를 제공한다고 가정 할 수는 없습니다. –

+0

내가 보는 것은 두 가지 호출 모두 데이터베이스 쿼리를 생성하는 것입니다. 그렇다면 쿼리는 무엇이고 결과는 무엇입니까? –

답변

3

enumerable이 호출간에 변경되면 이런 일이 발생할 수 있습니다. GetNetworkRoutes은 느린 평가를 사용하여 결과를 반환합니다. 그래서 그 결과가 Min 메서드를 호출 할 때마다 열거됩니다. 따라서 두 번째 결과는 다른 결과를 반환하며 그 이유는 분입니다. 가치는 다릅니다. 이 사용을 막으려면 ToList 또는 ToArray 메서드를 사용하여 결과를 구체화하십시오. 그리고 그것을 당신의 방법으로 전달하십시오.

관련 문제