レイヤーに持っていくべき問題かとかいろいろたらいまわしになりそうな話。やったことまず、何をやろうとして問題が起きてるのか。コンパイラーが内部的に空の配列を作って引数に渡します。以降をターゲットにすると、生成されるコードが少し変わります。Array.Empty<object>())もちろん、GC性能改善のために、無駄な配列インスタンスを作らないため。以降をターゲットにする場合にしかできません。参照しているときにしかこの最適化をしません。ここで問題は、例えば以下のような場合。その結果、4.5.2をターゲットにしているにも関わらず、Array.Empty最適化がかかってしまう。なると、サーバー上では動作しなくなる(「Array.Emptyは見つかりません」エラーが出る)という問題。取れる対処ということで、これはRoslynの問題か、msbuildの問題か、みたいな話に。根本解決にはmsbuild側を直す必要があるということで、このissueはCloseされて、msbuild側に問題レポートが飛びました。側でできそうな対処は、プロジェクトで指定したターゲットと実際にわたってきた.NETアセンブリのバージョンが違ったら警告なりエラーなり出すというのなんですが、現状、msbuild側から.NETのバージョンを受け取ってないので不可能とのこと。msbuild側からその.NETバージョンを渡してもらうようにしないとダメかもという。マシン上のインストール状況に左右されるんじゃないかなんて話も出ています。置き換える最適化をJITレベルでやればこんな問題起きないし、より一層性能的に有利なんじゃない?という。レベルでの最適化は結構深刻な互換性問題を引き起こすので無理とのこと。Array.Empty<T>()(シングルトンな単一インスタンスを常に返す)に置き換えると不具合を起こす。返すインスタンスをシングルトンに変えたら不具合が出て互換性問題レポートが来まくったとかいう事実もあったりします。置き換える処理は状況を見て限定的に行わないといけなくて、そういう状況判断はJITレベルでは無理。Roslyn側でやるしかないという話だそうです。的な複数条件分岐をどうしようという話。ページが立ってたので紹介。背景にある要望としては、以下の2点。マッチングに対応した分岐構文が必要ステートメントじゃなくて式にしてほしいこれに対して、提案できる文法は2方針があって、どうしようかという議論が出ています。使いまわせば、キーワードを増やす必要はないし、「switchはオワコンだから使うな」みたいな黒歴史ができなくて済むかもしれない。...みたいなラベル連続時だけ許されるフォールバック機構とか)いまいちな文法にしかできないかもしれない。議事録の投稿がありました。参照型に関する話をしてたみたいです。guest」(名誉あるお客様)に呼んで。おおむね方向性固まってきた模様。既存コードの意味が変わってしまうという問題に対しては、以下のように対処。いう2つのライブラリを利用するコードを書く場合、以下のようなシナリオがあり得る。チェックが入ったライブラリを使っている際に、自身はどう振る舞うか」を切り替えれないとまずいとのこと。「警告なんだしそこまで細かいことしなくても...」と思うかもしれませんが。「警告をエラーとして扱う」オプションがあって、このオプションを利用している人は結構います。警告を足したらユーザーから文句を言われたことがあるそうです。認めるかどうかは結構難しい問題。現状は認める方向で考えてるみたいです。必須にしたりというのはできる範囲でチェックする予定。