列表过滤变体

时间:2013-06-06 14:00:23

标签: c# list methods

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

例如,如果我有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;
}

这是某种实现的功能吗?

4 个答案:

答案 0 :(得分:5)

您可以使用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的引用。

答案 1 :(得分:4)

您可以使用LINQ:

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

答案 2 :(得分:1)

使用LINQ来完成它。

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

答案 3 :(得分:1)

LINQ非常适用于此目的:

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