Тем не менее, это работает и выглядит одинаково и просто на пару символов длиннее.
у я не могу использовать инициализатор массива с неявно типизированной переменной?
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
Это только добавляет к моей путанице. И «это так, потому что в спецификации так сказано» мало что поможет. Почему спецификация такая? В чем здесь обоснование?