为什么编译器不能推断对象数组类型

为什么编译器不能推断对象数组类型

本文介绍了为什么编译器不能推断对象数组类型?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道为什么这是有效的:

 对象[]数组= {唧唧歪歪。,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,二}; //错误

据说是一个错误,因为:

这篇关于为什么编译器不能推断对象数组类型?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-29 07:47