rksoftware

Visual Studio とか C# とかが好きです

C# 9.0 の確認「ターゲットにより型指定された条件式」

C# 9.0 の確認の目次はこちら

■ ターゲットにより型指定された条件式

ドキュメントはこちら

適合性と完成度の機能 という項目の割と読み進めた所の 「同様の機能により、条件式の対象となる型の解決が向上します。」 から始まるブロックです。
ちょっと何言っているかわからないので、試しにそれっぽいことを書いてみましょう。

■ 検証コードと結果

■ これはエラーになる

これはエラーになります。
型が List<int> なのか int[] なのか推論できませんからね。

var list = true ? new List<int>() : new int[0];

■ エラーを消してみる

こんな感じでキャストするとエラーがなくなります。

var list = true ? (IEnumerable<int>)new List<int>() : new int[0];

でも、これだったら宣言に型を書いても良い感じがしますね。しかし残念ながら次のコードはこれまでエラーになっていました。

IEnumerable<int> list = true ? new List<int>() : new int[0];

■ C# 9 では

C# 9 では先ほどのコードがエラーになりません。

IEnumerable<int> list = true ? new List<int>() : new int[0];

地味ですがこういうことなのでしょう。

■ まとめ

C# が賢くなりました。積極的に狙って書くことはドキュメントの通りにあまりないのかもしれませんが、古い環境で悩む日が来るかもしれません。完全に理解しておきましょう。