Перечисления в лямбда-выражениях компилируются по-разному; следствие улучшения разрешения перегрузки?


при попытке 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)
}

хотя исправление моего кода обхода дерева было простым, и дополнительная деталь ценится, кто-нибудь знает о других может быть, они вот так плавают?

кроме того, есть ли у кого-нибудь ссылка на информацию о специфике того, как было улучшено разрешение перегрузки? Я ничего не могу найти.

1 67

1 ответ:

Это не имеет ничего общего с разрешением перегрузки. Предыдущий компилятор преждевременно оптимизировал правую часть сравнения, тем самым опуская код, соответствующий исходному выражению.