Почему я не могу использовать инициализатор массива с неявно напечатанной переменной?

Почему я не могу использовать инициализатор массива с неявно напечатанной переменной?

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: не может назначать инициализатор массива на неявно набранный локальный


Обновление: я составил программу с использованием четырех методов декларации юридических массивов, и он генерирует тот же IL: http://pastebin.com/28jdafbl

Это просто добавляет к моей путанице. И "это так, потому что это так, потому что Спец говорит, что «мало помощи. Почему спецификация такая? Что это здесь обоснование?

16
задан Aillyn 8 September 2011 в 19:45
поделиться