【问题标题】:List filtering variant列表过滤变体
【发布时间】:2013-06-06 14:00:22
【问题描述】:

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

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

这是某种实现的功能吗?

【问题讨论】:

    标签: c# list methods


    【解决方案1】:

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

    【讨论】:

    • 您可能打算使用Where 而不是First?我认为 OP 想要全部检索它们,而不仅仅是第一个......
    • @PaoloTedesco 是的,如果我们基于操作问题的答案,您是对的。应该是.. where
    【解决方案2】:

    您可以使用 LINQ:

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

    【讨论】:

      【解决方案3】:

      使用 LINQ 来完成。

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

      【讨论】:

        【解决方案4】:

        LINQ 非常适合此目的:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-18
          • 1970-01-01
          • 2015-04-27
          • 1970-01-01
          • 2023-03-23
          • 2013-09-29
          • 2013-08-27
          • 1970-01-01
          相关资源
          最近更新 更多