如何在不知道类型的情况下初始化数组中的项目?

时间:2012-10-01 20:56:55

标签: c# arrays interface constructor

如果我传递了一个实现接口的类的实例,我不一定知道确切的类型。如果我想创建这个类的数组(无论它是什么),我可以这样做:

IWhatever[] ArrayOfClass = (IWhatever[])Array.CreateInstance(InstanceOfClass.GetType(), length);

只要InstanceOfClass是实现IWhatever的类的实例,这就可以了。

问题是我似乎无法弄清楚如何初始化数组的成员。我认为new IWhatever()可能有用,但事实并非如此。

如何构造数组成员?

2 个答案:

答案 0 :(得分:2)

您需要将每个成员初始化为实现该接口的某个类的实例。

如果您想要与InstanceOfClass相同的类型,并且该类型具有默认构造函数,则可以使用以下内容:

for(int i=0;i<ArrayOfClass.Length;++i)
{
    ArrayOfClass[i] = (IWhatever)Activator.CreateInstance(InstanceOfClass.GetType());
}

答案 1 :(得分:0)

向界面添加工厂方法。工厂方法将创建一个实例 正确的特定类型,您根据其泛型类型指定为数组。