ゆるふわで雑な日記

Microsoft系の技術情報を中心にゆるふわに綴っていく予定です

細かなお話

先日Twitterで、

Func<int,int> f = bool ? x => x + 1 : x => x -1;

Build できない的な話をしたりしました。 上のコードが Build できないのは、
x => x + 1x => x -1 の間に暗黙の変換がないからなんですが、 x => x + 1 単体でも型は不明(Action<T>なのか、Func<T,RT>なのかは人が見てもわからないしユーザー定義の delegateを含めると可能性は無限大)

いや、左に型書いてあるじゃんって思いますよね?
C#的には左辺の型を右辺に適用することは基本的にありません(でした)。

// そう、こいつが現れるまでは!!
int i = default;

まあ奴は 0 をセットしているだけなので構文解析的なコストはないのでやりやすい ってことで色々やってみた
C#

VB

scala

なるほど?C#もっと色々使って推論したら良いのにっていう人の気持ちもわかるし、
構文解析のコストが~っていう人の気持ちもわかる
(型推論とか禁止なって人の気持ちはあまりわからない) まあ、このケースに対して何か変化があるかどうかは知らないけど、C#の将来のバージョンアップ(8.0くらい?)で左辺型推論入るらしいよ?