2010-06-09 34 views
8

我有一個名爲「ClassA」的超類和兩個子類「Class1」和「Class2」。超類列表中的foreach繼承(子類)對象

我有一個包含「Class1」和「Class2」對象的列表,該列表的類型是「ClassA」。
我想通過在列表中只有「1類」對象環通過執行類似

List<ClassA> AList = new List<ClassA>; 
AList.Add(new Class1()); 
AList.Add(new Class2()); 

foreach (Class1 c1 in AList) 
{ 
    // Do Something 
} 

,但是當我這樣做,當它到達一個對象的類型是不是代碼拋出一個異常「的Class1 」。

如何以簡單的方式完成此操作,而不必檢查列表中的對象類型,並在它是正確的類型時進行轉換。像這樣:

foreach (ClassA cA in AList) 
{ 
    if (cA.GetType() == typeof(Class1)) 
    { 
     // Do Something 
    } 
} 

回答

12

使用LINQ:

foreach (Class1 c1 in AList.OfType<Class1>()) { } 

請注意,如果您想爲您在一個循環中的類型,asis運營商都是爲了這個。像:

foreach (ClassA cA in AList) { 
    Class1 c1 = cA as Class1; 
    if (c1 != null) { 
    // do something 
    } 
} 
+0

我必須使用.NET 2.0和不能使用LINQ – Amr 2010-06-09 16:05:34

+0

使用 「方式」 選項即可。 – Meligy 2010-06-09 16:15:53

1
foreach(Class1 c1 in AList.OfType<Class1>()) 
{ 
    //do something 
} 
+0

我必須使用.NET 2.0並且不能使用LINQ – Amr 2010-06-09 16:08:41