LINQ 元素運算符 Single和SingleOrDefault

元素運算符                    描述                    
Single                    返回集合中的唯一元素,或唯一滿足條件的元素。如果Single()在集合中未找到任何元素或一個以上的元素,則拋出InvalidOperationException。                    
SingleOrDefault                    與Single相同,不同之處在于它返回指定泛型類型的默認值,而不是在找不到指定條件的元素時拋出異常。但是,如果在集合中為指定條件找到了多個元素,它將拋出InvalidOperationException。                    

Single和SingleOrDefault具有兩個重載方法。第一個重載方法不使用任何輸入?yún)?shù),并返回集合中的單個元素。第二種重載方法將lambda表達式作為指定條件的謂詞委托,并返回滿足指定條件的單個元素。

Single()和SingleOrDefault()重載:        
public static TSource Single<TSource>(this IEnumerable<TSource> source);
public static TSource Single<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
public static TSource SingleOrDefault<TSource>(this IEnumerable<TSource> source);
public static TSource SingleOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

Single()返回集合中的唯一元素,或唯一滿足指定條件的元素。如果給定的集合不包含任何元素或包含多個元素,則Single()拋出InvalidOperationException。

SingleOrDefault()方法與Single()方法具有相同的作用。唯一的區(qū)別是,如果集合為空,不包含一個以上元素或?qū)τ谥付l件不包含一個或多個元素,則它返回集合數(shù)據(jù)類型的默認值。

IList<int> oneElementList = new List<int>() { 7 };
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("oneElementList 中的唯一元素: {0}", oneElementList.Single());
Console.WriteLine("oneElementList 中的唯一元素: {0}",oneElementList.SingleOrDefault());

Console.WriteLine("emptyList中的元素: {0}", emptyList.SingleOrDefault());
Console.WriteLine("intList中唯一小于10的元素: {0}",intList.Single(i => i < 10));

//下面拋出一個異常
//Console.WriteLine("intList中唯一的元素: {0}", intList.Single());
//Console.WriteLine("intList中唯一的元素: {0}", intList.SingleOrDefault());
//Console.WriteLine("emptyList中唯一的元素: {0}", emptyList.Single());
輸出:
oneElementList中的唯一元素:7 
oneElementList中的唯一元素:7 
emptyList中的元素:0 
intList中唯一小于10的元素:7

以下示例代碼將引發(fā)異常,因為Single()或SingleOrDefault()對于指定條件不返回任何元素或返回多個元素。

IList<int> oneElementList = new List<int>() { 7 };
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>();

//下面拋出錯誤,因為列表包含多個小于100的元素
Console.WriteLine("intList中小于100的元素: {0}", intList.Single(i => i < 100));

//下面拋出錯誤,因為列表包含多個小于100的元素
Console.WriteLine("intList中小于100的元素: {0}", intList.SingleOrDefault(i => i < 100));

//由于列表包含多個元素,下面拋出錯誤
Console.WriteLine("intList中唯一的元素: {0}", intList.Single());

//由于列表包含多個元素,下面拋出錯誤
Console.WriteLine("intList中唯一的元素: {0}", intList.SingleOrDefault());

//下面拋出錯誤,因為列表不包含任何元素
Console.WriteLine("emptyList 中的唯一元素: {0}", emptyList.Single());

要記住的要點           

  1. Single()要求集合中只有一個元素。

  2. Single() 當集合中沒有任何元素或一個以上元素時,拋出異常。

  3. 如果在Single()中指定了一個條件,并且結(jié)果不包含任何元素或包含多個元素,則會引發(fā)異常。

  4. 如果集合或指定條件中沒有元素,SingleOrDefault()將返回泛型集合的數(shù)據(jù)類型的默認值。

  5. 如果集合或指定條件中有多個元素,SingleOrDefault()將引發(fā)異常。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清