先日Twitterで、
Func<int,int> f = bool ? x => x + 1 : x => x -1;
が Build
できない的な話をしたりしました。
上のコードが Build
できないのは、
x => x + 1
と x => x -1
の間に暗黙の変換がないからなんですが、
x => x + 1
単体でも型は不明(Action<T>
なのか、Func<T,RT>
なのかは人が見てもわからないしユーザー定義の
delegateを含めると可能性は無限大)
いや、左に型書いてあるじゃんって思いますよね?
C#的には左辺の型を右辺に適用することは基本的にありません(でした)。
// そう、こいつが現れるまでは!! int i = default;
まあ奴は 0
をセットしているだけなので構文解析的なコストはないのでやりやすい
ってことで色々やってみた
C#
VB
scala
なるほど?C#もっと色々使って推論したら良いのにっていう人の気持ちもわかるし、
構文解析のコストが~っていう人の気持ちもわかる
(型推論とか禁止なって人の気持ちはあまりわからない)
まあ、このケースに対して何か変化があるかどうかは知らないけど、C#の将来のバージョンアップ(8.0くらい?)で左辺型推論入るらしいよ?