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)
}
私のツリートラバースコードの修正は簡単で、追加の詳細は高く評価されていますが、このように浮かんでいる他の落とし穴を知っている人はいますか?
あるいは、過負荷の解決がどのように改善されたかの詳細に関する情報へのリンクを誰かが持っていますか?何も見つかりません。
これは過負荷の解決とは何の関係もありません。以前のコンパイラは、比較の右側を時期尚早に最適化したため、ソース式に対応するコードが省略されていました。