暗黙的に型指定された変数で配列初期化子を使用できないのはなぜですか?
string[] words = { "apple", "strawberry", "grape" }; // legal
string[] words = new string[]{ "apple", "strawberry", "grape" }; // legal
var words = new []{ "apple", "strawberry", "grape" }; // legal
var words = new string[]{ "apple", "strawberry", "grape" }; // legal
var words = { "apple", "strawberry", "grape", "peach" }; // ILLEGAL
この制限の技術的な理由はありますか?次のようにタイプを推測できないのはなぜですか。
var number = 10;
var text = "Hello";
コンパイラは私が何をしようとしているのかを明確に知っていますが、それは許可されません。
CS0820:暗黙的に型指定されたローカルに配列初期化子を割り当てることができません
更新:4つの有効な配列宣言メソッドを使用してプログラムをコンパイルしましたが、同じILが生成されます:http://pastebin.com/28JDAFbL
これは私の混乱を増すだけです。そして、「仕様がそう言っているので、それはこのようなものです」はほとんど役に立ちません。なぜこのようなスペックなのですか?ここでの理論的根拠は何ですか?