Visual Studio 2019 16.2.2 と 16.3 Preview 2 と、あと、 .NET Core 3.0 Preview 8 が出てますね。

16.2.2 は脆弱性の修正だけっぽいですかね、リリース ノートを見るに。 .NET Core 3.0 Preview 8 も「最終リリースに向けて磨いてるとこ」みたいなことを言っているので大きな変更はないはず。

16.3 Preview 2 はこまごまと結構追加が。

16.3 Preview 2

僕的に気になるのはまあ .NET/C# がらみくらいなわけですが、 それも今回はそこそこ差分あり。

IDE 機能

.NET Productivity」に書かれてる通り、

  • 1行内に大量にメソッドチェーンでつないでる奴を複数行にばらす整形
  • 先に new DateTime みたいなインスタンス生成を書いてから IDE 機能でローカル変数を導入

とかがあるみたいです。

あと、これは IDE 機能なのか C# 機能なのかどっちに分類していいのかわからないですけど、 doc コメント内で <em> とか <strong> とかのスタイル変更タグが使えるようになったみたいです。

doc コメントにスタイル反映

詳しくはこの PR を参照: Implement Quick Info styles #35667

target-typed switch 式

C# 8.0 の変更は大部分もうnull 許容参照型がらみだけ… という状況下において、1個だけ他の変更がありました。

switch 式でターゲットからの型推論が効くようになりました。 要するに以下のようなコードが 16.3 Preview 2 からコンパイルできるようになります。

class Program
{
    class Base { }
    class A : Base { }
    class B : Base { }
 
    static Base M(bool b) => b switch
    {
        // 条件ごとに型が違うので、これまでは switch 式の結果の型が確定できなかった。
        // ターゲット(この場合戻り値の Base)からの型推論で型を確定するようになった。
        true => new A(),
        _ => new B(),
    };
}

まあ元々「スケジュール的に厳しいけど C# 8.0 正式リリース時点で入れておかないと後からの変更は破壊的になるので避けたい」って言ってたやつです。 ほんとにぎりぎり間に合わせて来た感じ。

null 許容参照型がらみ

さらっと動作確認。

計画に上がってたもの大体一通り実装されてそうな雰囲気。 今度こそnull 許容参照型のページを埋めるの本気出さなきゃ…

ちなみに、一昨日書いたばかりの文章さっそく書き換えるというタイミングのよさ。

「この挙動で本当にいいの?」みたいなものもあったりはするんですが… 「vNext」マイルストーンが付いていたりするので、C# 8.0 時点ではあきらめていそうです。 例えば以下のようなやつ。

要するに、MaybeNull とかの属性は、外から見ると正しく働くものの、メソッドの中から見ると妥協的という感じ。 とりあえずどっちが重要かと言われると「外から」の方なので、重要なところだけは最低限実装したという。

ただ、DoesNotReturnIf が期待通り動いていないのはなんかおかしい感じが。 関連 Pull Request も通ってるので動作してそうなものなんですけども。 マージしたタイミングの問題ですかね…