LINQ 元素運(yùn)算符 First和FirstOrDefault

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è)元素。

First() 和FirstOrDefault()重載:        
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í)異常:序列不包含匹配元素
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清