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

时间:2014-05-21 08:10:14

标签: c# linq

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) ??

2 个答案:

答案 0 :(得分:6)

List<Tiger> tigers = animals.OfType<Tiger>().ToList();

答案 1 :(得分:1)

var tigers = animals.Where(a =&gt; a是Tiger);