lambdaexpression式中的枚举编译方式不同; 重载解决scheme改进的后果?

在尝试Visual Studio 2015 RC时,我收到了以前工作代码的运行时错误。 给定作为Expression<>传递给函数的lambda (x => x.CustomerStatusID == CustomerStatuses.Active) ,debugging器在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) } 

虽然我的树遍历代码的修复是直截了当的,额外的细节是赞赏,有没有人知道任何其他陷阱像这样漂浮?

或者,有没有人有链接的重载分辨率如何改善的具体细节的信息? 我找不到任何东西。

这与重载parsing无关。 以前的编译器过早地优化了比较的右侧,从而省略了对应于源expression式的代码。