First和FirstOrDefault方法從集合中第零個(gè)索引返回一個(gè)元素,即第一個(gè)元素。另外,它返回滿足指定條件的元素。
元素運(yùn)算符 | 描述 |
---|---|
First | 返回集合的第一個(gè)元素,或滿足條件的第一個(gè)元素。 |
FirstOrDefault | 返回集合的第一個(gè)元素,或滿足條件的第一個(gè)元素。如果索引超出范圍,則返回默認(rèn)值。 |
First和FirstOrDefault具有兩個(gè)重載方法。第一個(gè)重載方法不使用任何輸入?yún)?shù),并返回集合中的第一個(gè)元素。第二個(gè)重載方法將lambda表達(dá)式作為謂詞委托來(lái)指定條件,然后返回滿足指定條件的第一個(gè)元素。
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表達(dá)式或Func委托返回集合的第一個(gè)元素,或滿足指定條件的第一個(gè)元素。如果給定的集合為空或不包含任何滿足條件的元素,則它將拋出 InvalidOperation 異常。
FirstOrDefault()方法與First()方法具有相同的作用。唯一的區(qū)別是,如果集合為空或找不到滿足條件的任何元素,它將返回集合數(shù)據(jù)類(lèi)型的默認(rèn)值。
下面的示例演示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中的第一個(gè)元素: {0}", intList.First()); Console.WriteLine("intList中的第一個(gè)偶數(shù)元素: {0}", intList.First(i => i % 2 == 0)); Console.WriteLine("strList中的第一個(gè)元素: {0}", strList.First()); Console.WriteLine("emptyList.First()拋出InvalidOperationException"); Console.WriteLine("-------------------------------------------------------------"); Console.WriteLine(emptyList.First());
intList中的第一個(gè)元素:7 intList中的第一個(gè)偶數(shù)元素:10 strList中的第一個(gè)元素: emptyList.First()拋出InvalidOperationException ----------------------------------------------- -------------- 運(yùn)行時(shí)異常:序列不包含任何元素...
下面的示例演示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中的第一個(gè)元素: {0}", intList.FirstOrDefault()); Console.WriteLine("intList中的第一個(gè)偶數(shù)元素: {0}",intList.FirstOrDefault(i => i % 2 == 0)); Console.WriteLine("strList中的第一個(gè)元素: {0}", strList.FirstOrDefault()); Console.WriteLine("emptyList中的第一個(gè)元素: {0}", emptyList.FirstOrDefault());
intList中的第一個(gè)元素:7 intList中的第一個(gè)偶數(shù)元素:10 strList中的第一個(gè)元素: emptyList中的第一個(gè)元素:
在First()或FirstOrDefault()中指定條件時(shí)要小心。如果集合不包含任何滿足指定條件的元素或包含null元素,則First()將拋出異常。
如果集合包含空元素,則 FirstOrDefault ()在計(jì)算指定條件時(shí)拋出異常。下面的示例演示了這一點(diǎn)。
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的第一個(gè)元素: {0}", intList.First( i > 250)); Console.WriteLine("在 intList 中的第一個(gè)偶數(shù)元素: {0}", strList.FirstOrDefault(s => s.Contains("T")));
Run-time exception: Sequence contains no matching element //運(yùn)行時(shí)異常:序列不包含匹配元素