代码之家  ›  专栏  ›  技术社区  ›  Ben Williams

对象集合的FirstOrDefault

  •  3
  • Ben Williams  · 技术社区  · 16 年前

    我有如下课程:

    public class Animal
    {
        ...
    }
    
    public class Cow : Animal
    {
        ...
    }
    
    public class AnimalCollection : List<Animal>
    {
        public Animal GetFirstAnimal<T>()
        {
            foreach(Animal animal in this)
            {
                if(animal is T)
                    return T as Animal
            }
    
            return null;
        }
    }
    

    几个问题: 是否可以对集合使用FirstOrDefault而不是GetFirstAnimal()方法?如果可以,语法是什么?哪一个效率最高?它不会是一个庞大的收藏品。

    或者,是否有更好的方法一起做同样的事情?

    2 回复  |  直到 15 年前
        1
  •  11
  •   Bryan Watts    16 年前
    var firstCow = animals.OfType<Cow>().FirstOrDefault();
    
        2
  •  2
  •   Metro Smurf    16 年前

    替代使用 OfType 它实际上迭代整个列表 你可以用超负荷的 FirstOrDefault 并传入谓词:

    var firstAnimal = animals.FirstOrDefault( x => x is Animal ) as Animal;
    

    编辑 :正如@lee在评论中正确指出的那样, OfType 不重复整个列表;而是 OfType 将仅迭代集合,直到 首次违约 谓词匹配。