2011-05-04 43 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; 
    } 
}