我的印象是C#编译器将基于可以全部隐式转换为它们的类型隐式键入数组。
编译器生成
找不到隐式类型数组的最佳类型
public interface ISomething {}
public interface ISomething2 {}
public interface ISomething3 {}
public class Foo : ISomething { }
public class Bar : ISomething, ISomething2 { }
public class Car : ISomething, ISomething3 { }
void Main()
{
var obj1 = new Foo();
var obj2 = new Bar();
var obj3 = new Car();
var objects= new [] { obj1, obj2, obj3 };
}
我知道纠正此问题的方法是声明如下类型:
new ISomething [] { obj1, ...}
但是我在这里寻求帮助。
最佳答案
C#编译器考虑所有指定元素的类型集。它不考虑常见的基本类型等。
您可以强制转换以下表达式之一:
var objects= new [] { obj1, obj2, (ISomething) obj3 };
...但是我个人只是使用显式形式:
var objects= new ISomething[] { obj1, obj2, obj3 };
另外,如果您明确声明
obj1
,obj2
和obj3
中的任何一个或全部为ISomething
类型,那么在不更改数组初始化表达式的情况下也可以正常工作。根据C#3规范的第7.5.10.4节:
7.4.2.13节看起来像这样:
关于c# - 隐式键入实现接口(interface)的数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2799902/