2010-06-09 114 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