program tip

람다 식의 열거 형은 다르게 컴파일됩니다.

radiobox 2020. 11. 9. 08:00
반응형

람다 식의 열거 형은 다르게 컴파일됩니다. 과부하 해결 개선의 결과?


Visual Studio 2015 RC를 시도하는 동안 이전 작업 코드에서 런타임 오류가 발생했습니다. (x => x.CustomerStatusID == CustomerStatuses.Active)함수에으로 전달 된 람다 주어지면 Expression<>디버거는 표현식 트리에서 차이를 보여줍니다. 이전에는 다음과 같이 컴파일되었습니다.

.Lambda #Lambda1<System.Func`2[Services.DataClasses.CustomerDC,System.Boolean]>(Services.DataClasses.CustomerDC $x)
{
    (System.Int32)$x.CustomerStatusID == 0
}

그러나 C # 6.0에서는 이제 다음과 같이 컴파일됩니다.

.Lambda #Lambda1<System.Func`2[Services.DataClasses.CustomerDC,System.Boolean]>(Services.DataClasses.CustomerDC $x)
{
    (System.Int32)$x.CustomerStatusID == (System.Int32).Constant<Services.DataClasses.CustomerStatuses>(Active)
}

내 트리 순회 코드에 대한 수정이 간단하고 추가 세부 사항이 감사하지만 이와 같이 떠 다니는 다른 문제를 아는 사람이 있습니까?

또는 과부하 해결이 어떻게 개선되었는지에 대한 정보에 대한 링크가있는 사람이 있습니까? 나는 아무것도 찾을 수 없습니다.


이것은 과부하 해결과 관련이 없습니다. 이전 컴파일러는 비교의 오른쪽을 조기에 최적화하여 소스 표현식에 해당하는 코드를 생략했습니다.

참고 URL : https://stackoverflow.com/questions/30538335/enums-in-lambda-expressions-are-compiled-differently-consequence-of-overload-re

반응형