本文介绍了为什么编译器不能推断对象数组类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想知道为什么这是有效的:
对象[]数组= {唧唧歪歪。,23,真正的};
但这些都不是:
VAR阵列= {唧唧歪歪。,23,真正的};
VAR数组2 =新[] {唧唧歪歪。,23,真正的};
在第二个例子,为什么按照数组初始化值编译器不能推断出数组类型?这似乎很容易做到,特别是相对于一般类型inference.In为了定义一个对象数组为什么我必须指定数组类型明确?
VAR阵列=新的对象[] {唧唧歪歪。,23,真正的};
解决方案
由于数组中的类型不特定对象
- 他们是3种不同类型的都对象的子类。
如果您使用可以在阵列中推断出特定类型,编译器会推断类型。例如,这是好的:
VAR ARR =新[] {3,4,5}; //将正确推断INT []
请注意,这是明确的C#语言规范,其中规定8.5.1叫出来,对于 VAR
是受到以下限制:
- 的局部变量声明不能包括多个局部变量声明符。
- 的局部变量声明必须包含一个局部变量初始化。
- 的局部变量初始化必须是前pression。
- 的初始化前pression必须有一个编译时类型。
- 的初始化前pression不能引用声明的变量本身
在阵列的情况下,存在指定的示例:
变种Y = {1,2,3}; //错误,数组初始化不允许
对于新[] {唧唧歪歪。,23,真正};
的例子,这是在7.6.10叫出来。在那里,这个例子:
变种D =新[] {1,一,2,二}; //错误
据说是一个错误,因为:
这篇关于为什么编译器不能推断对象数组类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!