First和FirstOrDefault方法从集合中第零个索引返回一个元素,即第一个元素。另外,它返回满足指定条件的元素。
元素运算符 | 描述 |
---|---|
First | 返回集合的第一个元素,或满足条件的第一个元素。 |
FirstOrDefault | 返回集合的第一个元素,或满足条件的第一个元素。如果索引超出范围,则返回默认值。 |
First和FirstOrDefault具有两个重载方法。第一个重载方法不使用任何输入参数,并返回集合中的第一个元素。第二个重载方法将lambda表达式作为谓词委托来指定条件,然后返回满足指定条件的第一个元素。
public static TSource First<TSource>(this IEnumerable<TSource> source); public static TSource First<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate); public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source); public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
First()方法使用lambda表达式或Func委托返回集合的第一个元素,或满足指定条件的第一个元素。如果给定的集合为空或不包含任何满足条件的元素,则它将抛出 InvalidOperation 异常。
FirstOrDefault()方法与First()方法具有相同的作用。唯一的区别是,如果集合为空或找不到满足条件的任何元素,它将返回集合数据类型的默认值。
下面的示例演示First()方法。
IList<int> intList = new List<int>() { 7, 10, 21, 30, 45, 50, 87 }; IList<string> strList = new List<string>() { null, "Two", "Three", "Four", "Five" }; IList<string> emptyList = new List<string>(); Console.WriteLine("intList中的第一个元素: {0}", intList.First()); Console.WriteLine("intList中的第一个偶数元素: {0}", intList.First(i => i % 2 == 0)); Console.WriteLine("strList中的第一个元素: {0}", strList.First()); Console.WriteLine("emptyList.First()抛出InvalidOperationException"); Console.WriteLine("-------------------------------------------------------------"); Console.WriteLine(emptyList.First());
intList中的第一个元素:7 intList中的第一个偶数元素:10 strList中的第一个元素: emptyList.First()抛出InvalidOperationException ----------------------------------------------- -------------- 运行时异常:序列不包含任何元素...
下面的示例演示FirstOrDefault()方法。
IList<int> intList = new List<int>() { 7, 10, 21, 30, 45, 50, 87 }; IList<string> strList = new List<string>() { null, "Two", "Three", "Four", "Five" }; IList<string> emptyList = new List<string>(); Console.WriteLine("intList中的第一个元素: {0}", intList.FirstOrDefault()); Console.WriteLine("intList中的第一个偶数元素: {0}",intList.FirstOrDefault(i => i % 2 == 0)); Console.WriteLine("strList中的第一个元素: {0}", strList.FirstOrDefault()); Console.WriteLine("emptyList中的第一个元素: {0}", emptyList.FirstOrDefault());
intList中的第一个元素:7 intList中的第一个偶数元素:10 strList中的第一个元素: emptyList中的第一个元素:
在First()或FirstOrDefault()中指定条件时要小心。如果集合不包含任何满足指定条件的元素或包含null元素,则First()将抛出异常。
如果集合包含空元素,则 FirstOrDefault ()在计算指定条件时抛出异常。下面的示例演示了这一点。
IList<int> intList = new List<int>() { 7, 10, 21, 30, 45, 50, 87 }; IList<string> strList = new List<string>() { null, "Two", "Three", "Four", "Five" }; Console.WriteLine("intList中大于250的第一个元素: {0}", intList.First( i > 250)); Console.WriteLine("在 intList 中的第一个偶数元素: {0}", strList.FirstOrDefault(s => s.Contains("T")));
Run-time exception: Sequence contains no matching element //运行时异常:序列不包含匹配元素