在尝试 Visual Studio 2015 RC 时,我收到了先前工作代码的运行时错误。给定 lambda(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)
}
尽管对我的树遍历代码的修复很简单并且额外的细节值得赞赏,但有人知道像这样的其他问题吗?
或者,是否有人有有关如何改进重载解析的具体信息的链接?我找不到任何。
这与重载解析无关。以前的编译器过早地优化了比较的右侧,从而省略了与源表达式对应的代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)