получение того же типа унаследованных элементов класса из списка базовых классов с помощью linq

1
class Animal {   }

class Tiger : Animal {    }

class Lion : Animal {    }

Добавление некоторых животных (львов и тигров, полученных из родительского класса Animal) в список животных.

class Program
{
    static void Main(string[] args)
    {
        List<Animal> animals = new List<Animal>();
        animals.Add(new Tiger());
        animals.Add(new Tiger());
        animals.Add(new Tiger());
        animals.Add(new Lion());
        animals.Add(new Lion());
        animals.Add(new Lion());

        List<Tiger> tigers = new List<Tiger>();

        foreach (var item in animals){
            if(item is Tiger){
                var _tiger = item as Tiger;
                tigers.Add(_tiger);
            }
        }
    }
}

Я бы получил список тигров, используя вышеприведенный цикл foreach, но есть ли какая-либо реализация, чтобы получить список, если тигры используют Linq,

как List<Tiger> tigers = animals.where(somePredicate)??

Теги:
linq

2 ответа

5
Лучший ответ
List<Tiger> tigers = animals.OfType<Tiger>().ToList();
  • 1
    Это не скомпилируется без добавления ToList в конце.
  • 0
    @ Ли, но в большинстве случаев вам просто нужен IEnumerable <Tiger>, а не List <Tiger>, поэтому проще объявить переменную с помощью var
1

var tigers = animals.Where(a => a - Tiger);

  • 0
    Благодарю. но это дает мне тип возврата System.Linq.Enumerable.WhereListIterator<ConsoleApplication1.Animal> вместо List<Tigers> .
  • 0
    Вместо ответа на @ 3dd попробуйте этот List<Tiger> tigers = animals.Where(a => a is Tiger).ToList();
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню