列表过滤变体

本文关键字:过滤 列表 | 更新日期: 2023-09-27 18:17:18

是否有一种简单的方法(可能是一种方法)从列表中检索对象取决于其属性是否与请求的一个匹配?

例如,如果我有List<Animal>,并且Animal类有一个属性Size。我如何从Size=42列表中获得对象?这就像过滤一样,但是没有更简单、更快捷的方法吗?而不是使用ICollectionView .

public Animal getAnimalWithSize42 (List<Animal> animList)
{
    List<Animal> size42Animals = new List<Animal>
    foreach (Animal anim in animList)
    { 
        if(anim.Size==42)
       size42Animals.Add(anim);
    }
    return size42Animals;
}

这是某种实现的函数吗?

列表过滤变体

您可以使用LINQ,这通常是最简单的方法。比如:

IEnumerable<Animal> getAnimalWithSize42(IEnumerable<Animal> animList)
{
    return animList.Where(animal => animal.Size == 42);
}

如果你想要更灵巧——你甚至可以让调用者传递他们想要检索的内容:

IEnumerable<Animal> getAnimalsMeetingCriteria(IEnumerable<Animal> animals, Func<Animal, bool> filter)
{
    return animals.Where(filter);
}

确保在需要使用这个的文件中添加了对System.Linq的引用

您可以使用LINQ:

return animList.Where(anim => anim.Size == 42);

使用LINQ来完成。

List<Animal> size42Animals = animList.Where(anim => anim.Size == 42).ToList();

LINQ是理想的:

public Animal getAnimalWithSize42 (List<Animal> animList)
{
    return animList.Where(a => a.Size == 42);
}