使用linq从基类列表中获取相同类型的继承类项

Ano*_*oop 2 c# linq

class Animal {   }

class Tiger : Animal {    }

class Lion : Animal {    }
Run Code Online (Sandbox Code Playgroud)

将一些动物(来自父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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我会使用上面的foreach循环获取老虎列表,但如果老虎使用Linq,是否有任何实现来获取列表,

喜欢List<Tiger> tigers = animals.where(somePredicate)

qxg*_*qxg 6

List<Tiger> tigers = animals.OfType<Tiger>().ToList();
Run Code Online (Sandbox Code Playgroud)