Докато изпробвах 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)
}
Въпреки че корекцията на моя код за преминаване през дърво беше ясна и допълнителните подробности се оценяват, някой знае ли за някакви други проблеми, които се носят наоколо като този?
Като алтернатива, някой има ли връзка към информация за спецификата на това как е подобрена разделителната способност на претоварването? Не мога да намеря никакви.
Expression.Constant(0)
(такаint
), докато с Roslyn той по-правилно изгражда израз от типExpression.Constant(CustomerStatuses.Active)
, така че използвайки enum с неговата стойност. Технически той изгражда израз катоExpression.Convert(Expression.Constant(CustomerStatuses.Active), typeof(int))
. Като се има предвид, че0
се обработва специално като стойност enum, тествах го с1
. Същият резултат. - person xanatos   schedule 30.05.2015I received a run-time error on previously working code
. - person Erik Philips   schedule 30.05.20150
и обработката на1
е една и съща, толкова различна между C# 5.0 и 6.0 (поне на tryroslyn) - person xanatos   schedule 30.05.2015(int)property == num
,(int)property == (int)enumValue
,property == enumValue
(третият е този, който обикновено бихте написали, ако пишете дърво на израза ръчно ) - person xanatos   schedule 30.05.2015