2009-04-01 11 views

Répondre

13

Pour filtrer les éléments par type Foo:

Foo[] myCastArray = myArray.OfType<Foo>().ToArray(); 

Pour essayer de jeter chaque élément Foo type:

Note latérale: Fait intéressant, C# supporte une caractéristique (défaut?) appelé array covariance. Cela signifie que si Derived est une référence qui peut être convertie en Base, vous pouvez implicitement convertir Derived[] en Base[] (ce qui peut être dangereux dans certaines circonstances, voir ci-dessous). Ceci est vrai seulement pour les tableaux et non List<T> ou d'autres choses. Le contraire (contravariance du tableau) n'est pas vrai, c'est-à-dire que vous ne pouvez pas lancer object[] en string[].

La version 4.0 de C# va également prendre en charge la covariance et la contravariance des génériques.

Exemple où covariance tableau pourrait causer des problèmes:

void FillArray(object[] test) { 
    test[0] = 0; 
} 
void Test() { 
    FillArray(new string[] { "test" }); 
} 

Je spécule C# a covariance de tableau parce que Java avait. Cela ne correspond pas vraiment au style C# global de faire les choses.

Questions connexes