lambda表达式中的枚举编译方式不同;重载分辨率提高的结果?

时间:2015-05-29 20:16:32

标签: c# lambda enums roslyn c#-6.0

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

虽然对我的树遍历代码的修复是直截了当的,并且其他细节很受欢迎,有没有人知道其他任何问题如此漂浮?

或者,是否有人链接到有关如何改进重载决策的细节的信息?我找不到任何。

1 个答案:

答案 0 :(得分:4)

这与重载解析无关。之前的编译器过早地优化了比较的右侧,从而省略了与源表达式相对应的代码。