C# 在运行时之前不知道类型的数组列表

C# 在运行时之前不知道类型的数组列表,c#,.net,reflection,.net-3.5,arraylist,C#,.net,Reflection,.net 3.5,Arraylist,我有以下情况: 我有一个数组列表,可以包含三种可能的对象类型之一,我只能在运行时访问它们 在本例中,我们将其称为: ObjType1 ObjType2 ObjType3 然后我需要循环遍历数组列表并访问每个对象的几个属性(所有三个对象类型都包含相同的两个属性名),然后将这些值设置为其他三个对象类型之一的属性。最后,需要将新对象添加到数组列表中 ObjType4 ObjType5 ObjType6 由于我事先不知道数组列表包含的对象类型,我猜我需要使用反射来获取对象属性。一旦我有了这些属性,我

我有以下情况:

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

在本例中,我们将其称为:

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

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

你认为实现这一目标的最佳方式是什么

谢谢大家的时间


编辑-我之前应该提到,我没有权限更改这三个类。

您应该让这三种类型都实现一个具有这些属性的接口。

然后可以使用
列表

您应该使所有三种类型都实现一个具有这些属性的接口。

然后可以使用
列表

使用接口,将两个属性放入其中,并将其应用于三个类中的每一个。这就是它们的用途。

使用接口,将两个属性放入其中,并将其应用于三个类中的每一个。这就是它们的用途。

如果由于某种原因无法更改类,则可以在循环时检查每个项的类型:

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;
   }
}

如果由于某种原因无法更改类,则可以在循环时检查每个项的类型:

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;
   }
}

这是接口存在的100%原因,这是一个选项吗?.net BCL已经有了解决方案..使用通用列表不幸的是我没有权限更改三个类这是接口存在的100%原因,这是一个选项吗?.net BCL已经有了解决方案..使用泛型列表不幸的是,我没有权限更改我之前应该提到的三类。我没有权限访问我之前应该提到的三类类型。我没有权限访问这三类类型