我有一个IList Animals farmAnimals; 这个清单有三种类型, 奶牛 羊 鸡 我如何使用lambda查询或linq-to-objects从列表中删除所有鸡,所以我有一个单独的鸡列表,原始列表现在只有奶牛和绵羊. 我是否
这个清单有三种类型,
>奶牛
>羊
>鸡
我如何使用lambda查询或linq-to-objects从列表中删除所有鸡,所以我有一个单独的鸡列表,原始列表现在只有奶牛和绵羊.
我是否必须制作三个列表(原始的2个新列表,已过滤)然后将原始列表清空?还是有一种比较棘手的方法?
结果需要
IList<Aniamls> chickens; IList<Animals> farmAnimals; // only contains the cows and sheep, now.
干杯!
澄清问题:
什么是更高效的? FindAll&删除所有与Where的建议?
假设:public abstract class Animal {} public class Chicken : Animal {}
你可以做:
var chickens = animals.OfType<Chicken>().Cast<Animal>().ToList(); var nonChickens = animals.Except(chickens).ToList();
编辑
任何合理的答案都应该是O(n),这意味着原始列表中的每个项目只处理一次.因此,我建议采取一种必要的方法:
var chickens = new List<Animal>(); var nonChickens = new List<Animal>(); foreach(var animal in animals) { var list = animal is Chicken ? chickens : nonChickens; list.Add(animal); }