首页 / 教程列表 / LINQ教程 / LINQ操作符之Single与SingleOrDefault

LINQ操作符之Single与SingleOrDefault

650 更新于: 2022-04-29 读完约需 10 分钟

Single与SingleOrDefault概述

Single()用以返回集合中唯一的元素,或者唯一满足指定条件的元素。如果给定集合不包含元素或包含多个元素,则Single()将抛出InvalidOperationException异常。

SingleOrDefault()方法与Single()方法相同。惟一的区别是,如果集合为空、包含多个元素、没有找到元素或指定条件下的多个元素,不会抛出异常,而是返回集合数据类型的默认值。

重载方法结构如下:

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返回集合中惟一的元素

下面的示例程序中,创建了一个包含整数的集合numbers,然后使用Single方法获取惟一的元素:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new List<int>() { 6 };
            var result = numbers.Single();
            Console.WriteLine($"集合numbers中惟一个元素值为:{result}");

            Console.Read();
        }
    }
}

运行结果:

集合numbers中惟一个元素值为:6

Single条件筛选惟一元素

以下是使用Single的带lambda表达式参数的重载查找集合numbers中除以10余数为2的元素的示例:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            var result = numbers.Single(x => x % 10 == 2);
            Console.WriteLine($"集合numbers中除以10余数为2的元素为:{result}");

            Console.Read();
        }
    }
}

运行结果:

集合numbers中除以10余数为2的元素为:2

Single超出索引范围

Single操作的集合没有元素时,会抛出异常,所示如下:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new List<int>() { };
            var result = numbers.Single();
            Console.WriteLine($"集合numbers中惟一个元素值为:{result}");

            Console.Read();
        }
    }
}

运行抛出“索引超出范围”的异常如下:

SingleOrDefault返回集合中的惟一元素

SingleOrDefault()方法与Single()方法相同。惟一的区别是,如果集合为空、包含多个元素、没有找到元素或指定条件下的多个元素,不会抛出异常,而是返回集合数据类型的默认值。

下面的示例程序中,创建了一个包含整数的集合numbers,然后使用SingleOrDefault方法获取惟一元素:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new List<int>() { 6 };
            var result = numbers.SingleOrDefault();
            Console.WriteLine($"集合numbers中惟一个元素值为:{result}");

            Console.Read();
        }
    }
}

运行结果:

集合numbers中惟一个元素值为:6

以下示例演示使用SingleOrDefault方法获取空集合numbers的第一个元素:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqTutorial
{
    public class MyProgram
    {
        static void Main(string[] args)
        {
            var numbers = new List<int>() { };
            var result = numbers.SingleOrDefault();
            Console.WriteLine($"集合numbers中惟一个元素值为:{result}");

            Console.Read();
        }
    }
}

运行结果:

集合numbers中惟一个元素值为:0

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

本文永久链接码友网 » LINQ教程 » LINQ操作符之Single与SingleOrDefault 分享:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册