小编典典

Find() 与 Where().FirstOrDefault()

all

我经常看到人们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();
        }
    }
}

阅读 68

收藏
2022-07-16

共1个答案

小编典典

Find方法在哪里IEnumerable<T>?(反问。)

和方法适用于多种序列,包括Where、、等。任何实现的序列都可以使用这些方法。仅适用于. 通常更适用的方法,然后更 可重用
并产生更大的影响。FirstOrDefault``List<T>``T[]``Collection<T>``IEnumerable<T>``Find``List<T>
__

我想我的下一个问题是他们为什么要添加这个发现。这是一个很好的提示。我唯一能想到的是 FirstOrDefault 可以返回除 null
之外的其他默认值。否则,这似乎是一个毫无意义的补充

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

2022-07-16