2011-04-04 4 views
3

Si je définis un opérateur de conversion explicite entre deux types, ne devrais-je pas convertir explicitement les collections de ces types? C'est à dire.Conversion implicite des collections

public static explicit operator FooEntity(Entity entity) 
    { 
     FooEntity e = new FooEntity(entity); 
     return e; 
    } 

ainsi que je pouvais le faire,

IEnumerable<Entity> entities = GetEntities(); 
    IEnumerable<FooEntity> fooEntities = (IEnumerable<FooEntity>)entities; 

ou

IEnumerable<FooEntity> fooEntities = entities as IEnumerable<FooEntity> 

Est-ce possible d'une façon ou dois-je aussi créer mon propre opérateur de convertir entre les collections? Je reçois une erreur d'exécution qui indique que la conversion n'est pas possible.

Merci.

Répondre

3

C# ne supporte pas cette méthode de la variance de type générique en mission de collecte, vous devrez utiliser quelque chose comme:

IEnumerable<FooEntity> fooEntities = entities.Select(e => (FooEntity)e); 
+0

Est-ce que je dois surcharger Cast <>? Parce que j'ai essayé ceci en utilisant un opérateur implicite (plutôt qu'explicite) entre Entité et FooEntity mais toujours une erreur d'exécution vient en disant ne peut pas convertir d'Entité en FooEntity. –

+0

Non, si vous avez créé une surcharge de transtypage explicite pour les types d'éléments de la collection, c'est tout ce dont vous avez besoin. –

+0

Wow, il se trouve que vous avez raison - mon erreur. Je viens de lancer un test rapide et il semblerait que vous deviez utiliser 'Select()' à la place. –