2010-06-09 14 views
8

Tengo una superclase llamada "ClassA" y dos subclases "Class1" y "Class2".foreach objeto heredado (subclase) en una lista de superclase

Tengo una lista que contiene objetos de "Clase 1" y "Clase 2", esa lista es del tipo "Clase A".
Quiero recorrer sólo los objetos "Clase 1" en la lista haciendo algo como

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

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

pero cuando hago eso, el código genera una excepción cuando se llega a un objeto que no es del tipo "Clase 1 ".

Cómo se puede hacer esto de una manera sencilla sin tener que verificar el tipo de objeto en la lista y convertirlo si es del tipo correcto. de esta manera:

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

Respuesta

12

mediante LINQ:

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

Tenga en cuenta que si desea comprobar si hay un tipo en un bucle, los as y is operadores están destinados para ello. Al igual que:

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

tengo que usar .NET 2.0 y no puedo utilizar LINQ – Amr

+0

Utilice la opción "como" a continuación. – Meligy

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

Tengo que usar .NET 2.0 y no puedo usar LINQ – Amr

Cuestiones relacionadas