Find() 与Where().FirstOrDefault()

2024-03-29

我经常看到人们使用Where.FirstOrDefault()进行搜索并获取第一个元素。为什么不直接使用Find()?对方有优势吗?我看不出有什么不同。

namespace LinqFindVsWhere
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string>();
            list.AddRange(new string[]
            {
                "item1",
                "item2",
                "item3",
                "item4"
            });

            string item2 = list.Find(x => x == "item2");
            Console.WriteLine(item2 == null ? "not found" : "found");
            string item3 = list.Where(x => x == "item3").FirstOrDefault();
            Console.WriteLine(item3 == null ? "not found" : "found");
            Console.ReadKey();
        }
    }
}

哪儿是Find方法上IEnumerable<T>? (反问句。)

The Where and FirstOrDefault方法适用于多种序列,包括List<T>, T[], Collection<T>等任何实现的序列IEnumerable<T>可以使用这些方法。Find仅适用于List<T>。一般情况下比较适用的方法就比较多了reusable并产生较大的影响。

我想我的下一个问题是他们为什么要添加这个发现。这是一个很好的提示。我唯一能想到的是 FirstOrDefault 可以返回除 null 之外的不同默认值。否则它看起来就像是毫无意义的添加

Find on List<T>早于其他方法。List<T>在 .NET 2.0 中添加了泛型,并且Find是该类 API 的一部分。Where and FirstOrDefault添加为扩展方法IEnumerable<T>使用 Linq,这是更高的 .NET 版本。我不能肯定地说,如果 Linq 与 2.0 版本一起存在Find永远不会被添加,但对于早期 .NET 版本中出现的许多其他功能来说,可以说是这种情况,而这些功能在以后的版本中已过时或多余。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Find() 与Where().FirstOrDefault() 的相关文章

随机推荐