猿教程 Logo

Linq元素操作符:Single & SingleOrDefault

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买
元素运算符描述
Single返回集合中唯一的元素,或者只返回满足条件的元素。 如果Single()在集合中找不到元素或多个元素,则抛出InvalidOperationException。
SingleOrDefault与Single相同,除了它返回一个指定泛型类型的默认值,而不是如果没有为指定的条件找到元素则抛出异常。 但是,如果它在集合中为指定的条件找到多个元素,它将抛出InvalidOperationException。

Single和SingleOdeDefault有两种重载方法。 第一个重载方法不需要任何输入参数,并返回集合中的单个元素。 第二个重载方法将lambda表达式作为谓词委托,它指定条件并返回一个满足指定条件的元素。

相关实例:

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()方法相同的操作。 唯一的区别是,如果集合为空,包含多个元素或找不到指定条件的元素或多个元素,则返回集合的数据类型的默认值。

相关实例:

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("The only element in oneElementList: {0}", oneElementList.Single());
Console.WriteLine("The only element in oneElementList: {0}",
             oneElementList.SingleOrDefault());

Console.WriteLine("Element in emptyList: {0}", emptyList.SingleOrDefault());

Console.WriteLine("The only element which is less than 10 in intList: {0}",
             intList.Single(i => i < 10));

//Followings throw an exception 
//Console.WriteLine("The only Element in intList: {0}", intList.Single()); 
//Console.WriteLine("The only Element in intList: {0}", intList.SingleOrDefault()); 
//Console.WriteLine("The only Element in emptyList: {0}", emptyList.Single());

运行结果:

The only element in oneElementList: 7 
The only element in oneElementList: 7 
Element in emptyList: 0 
The only element which is less than 10 in intList: 7

以下示例代码会抛出异常,因为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>();

//following throws error because list contains more than one element which is less than 100
Console.WriteLine("Element less than 100 in intList: {0}", intList.Single(i => i < 100));

//following throws error because list contains more than one element which is less than 100
Console.WriteLine("Element less than 100 in intList: {0}", 
                                    intList.SingleOrDefault(i => i < 100));

//following throws error because list contains more than one elements
Console.WriteLine("The only Element in intList: {0}", intList.Single());

//following throws error because list contains more than one elements
Console.WriteLine("The only Element in intList: {0}", intList.SingleOrDefault());

//following throws error because list does not contains any element
Console.WriteLine("The only Element in emptyList: {0}", emptyList.Single());
要点
  1. Single()期望集合中只有一个元素。 

  2. Single()在集合中没有元素或多个元素时抛出异常。 

  3. 如果在Single()中指定了条件,并且result不包含元素或多个元素,那么它会抛出异常。 

  4. 如果在集合中没有元素或指定的条件,SingleOrDefault()将返回通用集合的数据类型的默认值。 

  5. SingleOrDefault()将在集合中存在多个元素或指定条件时抛出异常。

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Linq/linq-element-operator-single-singleordefault.html