【发布时间】:2012-01-17 08:13:21
【问题描述】:
这两行没有区别,因为编译器在第二行就知道它是一个int类型的数组。
var x = new int[] { 1, 2, 3 }; //Fine, x is int[]
var x = new [] { 1, 2, 3 }; //Fine, x is int[]
但是为什么我不能用不同的类型来做呢?为什么编译器不将我的变量转换为 object 类型?
var x = new object[] { 1, "df", 5 }; //Fine, x is object[]
var x = new [] { 1, "df", 5 }; //Error! "No best type found for implicity-typed-array"
编辑:
感谢您的所有回答。但是我仍然想知道,将编译器无法转换为类型object 的所有表达式都有哪些优点和缺点? (因为我使用var表示法,这意味着它不能是任何类型。我是这样理解的。)为什么编译器不能通过继承树找到最近的数组成员类型?
【问题讨论】:
-
是的,但问题主要是“为什么不以这种方式实现?”
-
Damien_The_Unbeliever 对乔伊的回答的评论说明了一切,真的。这对编译器来说工作量太大,更不用说推断
object[],结果对我来说非常违反直觉。 -
这可能是因为语言设计者认为对象数组很臭,他们不希望 C# 使用起来很容易,用起来很臭。
-
仅供参考,
var关键字与您的问题无关。object[] x = new[] { 1, "df" };也不起作用。
标签: c# .net c#-4.0 object new-operator