Подтвердить что ты не робот

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

При тестировании 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
}

Но в С# 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)
}

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

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

4b9b3361

Ответ 1

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