2011-05-04 57 views
0

我有以下情形:数组列表

我有可能包含三种可能的对象类型,我只能访问在运行时的一个数组列表。

堡这个例子可以给他们打电话:

ObjType1 
ObjType2 
ObjType3 

我需要再遍历每个对象的数组列表,并访问了几个属性(所有三个对象类型包含两个相同的属性名称),然后设置这些值的三个其他对象类型之一的属性。最后,需要将新对象添加到数组List中。

ObjType4 
ObjType5 
ObjType6 

由于我不知道数组列表包含事先什么对象类型,我猜,我需要使用反射来获取对象的属性。一旦我有属性,我可以将它们添加到包含与ObjType 4,5和6相同的两个属性的泛型类,然后将泛型类对象转换为传递给子过程/函数的所需对象类型,然后添加它到数组列表。

在您看来,最好的方法是达到这个目的吗?

感谢大家的时间

编辑 - 我应该在这之前提到的,我没有获得改变三类。

+1

这100%是接口存在的理由,是一种选择呢? – 2011-05-04 11:41:26

+0

.net BCL已经有解决方案..使用通用名单 – 2011-05-04 11:43:23

+0

不幸的是我没有权限更改三个类 – fedor333 2011-05-04 12:23:34

回答

4

您应该让所有三种类型实现与这些属性的接口。您可以使用List<YourInterface>

+0

我应该在之前提到过,我没有访问三个类的类型 – fedor333 2011-05-04 12:16:51

1

使用一个接口,将两个属性放入它并将它应用到你的三个类中的每一个。这就是他们在那里。

0

如果由于某种原因,你不能改变的类,您可以检查每个项目的类型,而循环:

string prop1 = ""; 
string prop2 = ""; 
foreach (object item in myArray) 
{ 
    if (item is ObjType1) 
    { 
     prop1 = (item as ObjType1).FirstProp; 
     prop2 = (item as ObjType1).SecondProp; 
    } 
    else if (item is ObjType2) 
    { 
     prop1 = (item as ObjType2).FirstProp; 
     prop2 = (item as ObjType2).SecondProp; 
    } 
    else if (item is ObjType3) 
    { 
     (item as ObjType3).FirstProp = prop1; 
     (item as ObjType3).SecondProp = prop2; 
    } 
}