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已经有了解决方案..使用泛型列表不幸的是,我没有权限更改我之前应该提到的三类。我没有权限访问我之前应该提到的三类类型。我没有权限访问这三类类型