gpt4 book ai didi

c# - lambda 表达式中的枚举的编译方式不同;重载分辨率改进的结果?

转载 作者:IT王子 更新时间:2023-10-29 03:42:36 24 4
gpt4 key购买 nike

在试用 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)
}

虽然对我的树遍历代码的修复很简单,而且额外的细节也很受欢迎,但有谁知道像这样四处飘荡的任何其他陷阱吗?

或者,是否有人提供有关如何改进重载解析的具体信息的链接?我找不到。

最佳答案

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

关于c# - lambda 表达式中的枚举的编译方式不同;重载分辨率改进的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30538335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com