C# - How to convert List to List, when Dog is a subclass of Animal?

前端 未结 3 1543
长情又很酷
长情又很酷 2021-01-17 14:17

I have a class Animal, and its subclass Dog. I have a List and I want to add the contents of some List<

相关标签:
3条回答
  • 2021-01-17 14:37

    You can use Cast<T> ()

    //You must have using System.Linq;
    
    List<Dog> dogs = new List<Dog> ();
    List<Animal> animals = new List<Animal> ();
    animals.AddRange (dogs.Cast<Animal> ());
    

    EDIT : As dlev points out, if you run framework 4 you don't need to cast.

    0 讨论(0)
  • 2021-01-17 14:49

    I believe this depends on which version of .Net you're using. I could be mistaken, but in .Net 4 I think you can do

    animalList.AddRange(dogList);
    

    Otherwise in .Net 3.5, you can do

    animalList.AddRange(dogList.Select(x => (Animal)x));
    
    0 讨论(0)
  • 2021-01-17 14:56

    You don't need the cast if you're using C#4:

    List<Animal> animals = new List<Animal>();
    List<Dog> dogs = new List<Dog>();
    
    animals.AddRange(dogs);
    

    That's allowed, because AddRange() accepts an IEnumerable<T>, which is covariant.

    If you don't have C#4, though, then you would have to iterate the List<Dog> and cast each item, since covariance was only added then. You can accomplish this via the .Cast<T> extension method:

    animals.AddRange(dogs.Cast<Animal>());
    

    If you don't even have C#3.5, then you'll have to do the casting manually.

    0 讨论(0)
提交回复
热议问题