Beim Ausprobieren von Visual Studio 2015 RC wurde ein Laufzeitfehler für zuvor funktionierenden Code angezeigt. Angesichts des Lambda (x => x.CustomerStatusID == CustomerStatuses.Active)
, das an eine Funktion als übergeben wurde Expression<>
, zeigt der Debugger einen Unterschied im Ausdrucksbaum. Früher wurde es so zusammengestellt:
.Lambda #Lambda1<System.Func`2[Services.DataClasses.CustomerDC,System.Boolean]>(Services.DataClasses.CustomerDC $x)
{
(System.Int32)$x.CustomerStatusID == 0
}
Aber in C # 6.0 wird es jetzt als kompiliert
.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)
}
Obwohl die Korrektur meines Code zum Durchlaufen von Bäumen unkompliziert war und das zusätzliche Detail geschätzt wird, kennt jemand andere Fallstricke, die so herumschwirren?
Hat jemand einen Link zu Informationen darüber, wie die Überlastungsauflösung verbessert wurde? Ich kann keine finden.
I received a run-time error on previously working code
.Antworten:
Dies hat nichts mit Überlastungsauflösung zu tun. Der vorherige Compiler hat die rechte Seite des Vergleichs vorzeitig optimiert, wodurch der dem Quellausdruck entsprechende Code weggelassen wurde.
quelle