为什么我不能将数组初始值设定项与隐式类型变量一起使用?
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
这只会增加我的困惑。并且“它是这样的,因为规范是这样说的”并没有什么帮助。为什么规格是这样的?这里的理由是什么?