C#开发-集合使用和技巧(三)集合扩展方法介绍

C#开发-集合使用和技巧(三)

集合扩展方法介绍

Enumerable 类扩展方法介绍

这些方法允许我们以声明式的方式处理集合数据。下面是 Enumerable 类中的一些常见方法及其用途:

方法 描述 类别
All 测试序列中的所有元素是否满足指定的条件。 查询方法
Any 检查序列是否包含任何元素,或者满足指定条件的元素。 查询方法
Average 计算序列中所有元素的平均值。 数值聚合
Concat 连接两个序列。 操作方法
Contains 检查序列中是否包含某个元素。 查询方法
Count 返回序列中元素的数量。 查询方法
Distinct 返回序列中不同的元素。 操作方法
ElementAt 返回序列中指定位置的元素。 查询方法
Except 返回第一个序列中不在第二个序列中的元素。 操作方法
First 返回序列的第一个元素。 查询方法
FirstOrDefault 返回序列的第一个元素,如果没有则返回默认值。 查询方法
GroupBy 将序列分割成多个组。 分组方法
GroupJoin 对两个序列进行连接,并按组返回结果。 分组方法
Intersect 返回两个序列中共有的元素。 操作方法
Join 将两个序列根据共同的属性连接起来。 操作方法
Last 返回序列的最后一个元素。 查询方法
LastOrDefault 返回序列的最后一个元素,如果没有则返回默认值。 查询方法
Max 返回序列中的最大值。 数值聚合
Min 返回序列中的最小值。 数值聚合
OfType 过滤序列中指定类型的元素。 查询方法
Reverse 反转序列中的元素。 操作方法
Select 将序列中的元素映射到新的形式。 转换方法
SelectMany 将序列中的元素映射到新的序列,并将它们合并成一个序列。 转换方法
SequenceEqual 比较两个序列是否相等。 查询方法
Single 返回序列中唯一的元素。 查询方法
SingleOrDefault 返回序列中唯一的元素,如果没有则返回默认值。
Skip 跳过序列中的前N个元素。 操作方法
Sum 计算序列中所有元素的总和。 数值聚合
Take 获取序列中的前N个元素。 操作方法
ToArray 将序列转换成数组。 转换方法
ToList 将序列转换成列表。 转换方法
ToLookup 将序列转换成查找字典。 转换方法
Where 根据条件筛选序列中的元素。 查询方法

扩展方法分类介绍

接下来,挑选一些常用的方法进行分类和介绍:

查询方法

  1. Where
    定义
csharp 复制代码
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);
**功能**:过滤序列中的元素。

示例

csharp 复制代码
var filtered = numbers.Where(n => n > 0); // 大于0的元素
  1. All
    定义
csharp 复制代码
public static bool All<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

功能 :检查序列中的所有元素是否满足指定条件。
示例:检查一个数字序列是否全部大于零。

csharp 复制代码
bool allPositive = numbers.All(num => num > 0);
  1. Any
    定义
csharp 复制代码
public static bool Any<TSource>(this IEnumerable<TSource> source);
public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

功能 :检查序列中是否有任何一个元素满足指定条件。
示例:检查一个序列是否包含任何负数。

csharp 复制代码
bool hasNegative = numbers.Any(num => num < 0);
  1. Contains
    定义
csharp 复制代码
public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value, IEqualityComparer<TSource>? comparer);
public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value);

用途:检查序列中是否包含某个特定的元素。

示例:检查序列中是否包含某个数字。

csharp 复制代码
bool containsFive = numbers.Contains(5);
  1. Count
    定义
csharp 复制代码
public static int Count<TSource>(this IEnumerable<TSource> source);
public static int Count<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

功能 :返回序列中元素的数量。
示例:获取序列中的元素总数。

csharp 复制代码
int count = numbers.Count();
  1. First
    定义
csharp 复制代码
public static TSource First<TSource>(this IEnumerable<TSource> source);
public static TSource First<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);

功能 :返回序列的第一个元素。
示例:获取序列中的第一个数字。

csharp 复制代码
int firstNumber = numbers.First();

数值聚合

  1. Average
    定义
csharp 复制代码
public static TSource Aggregate<TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func);
public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func);
public static TResult Aggregate<TSource, TAccumulate, TResult>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector);

public static double Average<TSource>(this IEnumerable<TSource> source, Func<TSource, int> selector);
public static double Average<TSource>(this IEnumerable<TSource> source, Func<TSource, long> selector);
public static double? Average<TSource>(this IEnumerable<TSource> source, Func<TSource, double?> selector);
public static float Average<TSource>(this IEnumerable<TSource> source, Func<TSource, float> selector);
public static double? Average<TSource>(this IEnumerable<TSource> source, Func<TSource, long?> selector);
public static float? Average<TSource>(this IEnumerable<TSource> source, Func<TSource, float?> selector);
public static double Average<TSource>(this IEnumerable<TSource> source, Func<TSource, double> selector);
public static double? Average<TSource>(this IEnumerable<TSource> source, Func<TSource, int?> selector);
public static decimal Average<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal> selector);
public static decimal? Average<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal?> selector);

public static float? Average(this IEnumerable<float?> source);
public static double? Average(this IEnumerable<long?> source);
public static double? Average(this IEnumerable<int?> source);
public static double? Average(this IEnumerable<double?> source);
public static decimal? Average(this IEnumerable<decimal?> source);
public static double Average(this IEnumerable<long> source);
public static double Average(this IEnumerable<int> source);
public static double Average(this IEnumerable<double> source);
public static decimal Average(this IEnumerable<decimal> source);
public static float Average(this IEnumerable<float> source);

功能 :计算序列中所有元素的平均值。
示例:计算一组数字的平均值。

csharp 复制代码
double average = numbers.Average();
  1. Max
    定义
csharp 复制代码
public static long Max<TSource>(this IEnumerable<TSource> source, Func<TSource, long> selector);
public static decimal Max<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal> selector);
public static double Max<TSource>(this IEnumerable<TSource> source, Func<TSource, double> selector);
public static int Max<TSource>(this IEnumerable<TSource> source, Func<TSource, int> selector);
public static decimal? Max<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal?> selector);
public static TSource? Max<TSource>(this IEnumerable<TSource> source, IComparer<TSource>? comparer);
public static int? Max<TSource>(this IEnumerable<TSource> source, Func<TSource, int?> selector);
public static long? Max<TSource>(this IEnumerable<TSource> source, Func<TSource, long?> selector);
public static float? Max<TSource>(this IEnumerable<TSource> source, Func<TSource, float?> selector);
public static TResult? Max<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector);
public static double? Max<TSource>(this IEnumerable<TSource> source, Func<TSource, double?> selector);
public static TSource? Max<TSource>(this IEnumerable<TSource> source);
public static float Max<TSource>(this IEnumerable<TSource> source, Func<TSource, float> selector);
public static float Max(this IEnumerable<float> source);
public static float? Max(this IEnumerable<float?> source);
public static long? Max(this IEnumerable<long?> source);
public static int? Max(this IEnumerable<int?> source);
public static double? Max(this IEnumerable<double?> source);
public static decimal? Max(this IEnumerable<decimal?> source);
public static long Max(this IEnumerable<long> source);
public static int Max(this IEnumerable<int> source);
public static double Max(this IEnumerable<double> source);
public static decimal Max(this IEnumerable<decimal> source);

功能 :获取序列中的最大值。
示例

csharp 复制代码
int max = numbers.Max(); // 获取最大值
  1. Min
    定义
csharp 复制代码
public static decimal Min(this IEnumerable<decimal> source);
public static TResult? Min<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector);
public static float Min<TSource>(this IEnumerable<TSource> source, Func<TSource, float> selector);
public static float? Min<TSource>(this IEnumerable<TSource> source, Func<TSource, float?> selector);
public static int? Min<TSource>(this IEnumerable<TSource> source, Func<TSource, int?> selector);
public static double? Min<TSource>(this IEnumerable<TSource> source, Func<TSource, double?> selector);
public static decimal? Min<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal?> selector);
public static long Min<TSource>(this IEnumerable<TSource> source, Func<TSource, long> selector);
public static int Min<TSource>(this IEnumerable<TSource> source, Func<TSource, int> selector);
public static decimal Min<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal> selector);
public static TSource? Min<TSource>(this IEnumerable<TSource> source, IComparer<TSource>? comparer);
public static TSource? Min<TSource>(this IEnumerable<TSource> source);
public static long? Min<TSource>(this IEnumerable<TSource> source, Func<TSource, long?> selector);
public static double Min<TSource>(this IEnumerable<TSource> source, Func<TSource, double> selector);
public static float Min(this IEnumerable<float> source);
public static float? Min(this IEnumerable<float?> source);
public static long? Min(this IEnumerable<long?> source);
public static int? Min(this IEnumerable<int?> source);
public static double? Min(this IEnumerable<double?> source);
public static decimal? Min(this IEnumerable<decimal?> source);
public static double Min(this IEnumerable<double> source);
public static long Min(this IEnumerable<long> source);
public static int Min(this IEnumerable<int> source);

功能 :获取序列中的最小值。
示例

csharp 复制代码
int min = numbers.Min(); // 获取最小值
  1. Sum
    定义
csharp 复制代码
public static int Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, int> selector);
public static long Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, long> selector);
public static decimal? Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal?> selector);
public static long? Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, long?> selector);
public static int? Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, int?> selector);
public static double Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, double> selector);
public static float? Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, float?> selector);
public static float Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, float> selector);
public static double? Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, double?> selector);
public static decimal Sum<TSource>(this IEnumerable<TSource> source, Func<TSource, decimal> selector);
public static long? Sum(this IEnumerable<long?> source);
public static float? Sum(this IEnumerable<float?> source);
public static int? Sum(this IEnumerable<int?> source);
public static double? Sum(this IEnumerable<double?> source);
public static decimal? Sum(this IEnumerable<decimal?> source);
public static long Sum(this IEnumerable<long> source);
public static int Sum(this IEnumerable<int> source);
public static double Sum(this IEnumerable<double> source);
public static decimal Sum(this IEnumerable<decimal> source);
public static float Sum(this IEnumerable<float> source);

功能 :计算序列中所有元素的总和。
示例

csharp 复制代码
int total = numbers.Sum(); // 计算总和

操作方法

  1. Distinct
    定义
csharp 复制代码
public static IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> source);
public static IEnumerable<TSource> Distinct<TSource>(this IEnumerable<TSource> source, IEqualityComparer<TSource>? comparer);

功能 :返回序列中不同的元素。
示例:去除重复的数字。

csharp 复制代码
IEnumerable<int> unique = numbers.Distinct();
  1. Reverse
    定义
csharp 复制代码
public static IEnumerable<TSource> Reverse<TSource>(this IEnumerable<TSource> source);

功能 :反转序列中的元素顺序。
示例

csharp 复制代码
IEnumerable<int> reversed = numbers.Reverse(); // 反转序列

分组方法

  1. GroupBy
    定义
csharp 复制代码
public static IEnumerable<TResult> GroupBy<TSource, TKey, TElement, TResult>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, Func<TKey, IEnumerable<TElement>, TResult> resultSelector, IEqualityComparer<TKey>? comparer);
public static IEnumerable<TResult> GroupBy<TSource, TKey, TElement, TResult>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, Func<TKey, IEnumerable<TElement>, TResult> resultSelector);
public static IEnumerable<TResult> GroupBy<TSource, TKey, TResult>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TKey, IEnumerable<TSource>, TResult> resultSelector, IEqualityComparer<TKey>? comparer);
public static IEnumerable<TResult> GroupBy<TSource, TKey, TResult>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TKey, IEnumerable<TSource>, TResult> resultSelector);
public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);
public static IEnumerable<IGrouping<TKey, TElement>> GroupBy<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector);
public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey>? comparer);
public static IEnumerable<IGrouping<TKey, TElement>> GroupBy<TSource, TKey, TElement>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, Func<TSource, TElement> elementSelector, IEqualityComparer<TKey>? comparer);

功能 :根据指定的键将序列分割成多个组。
示例:根据长度将字符串分组。

csharp 复制代码
var groups = strings.GroupBy(s => s.Length);

转换方法

  1. ToArray
    定义
csharp 复制代码
public static TSource[] ToArray<TSource>(this IEnumerable<TSource> source);

功能 :将序列(集合或者数组)转换成数组。
示例

csharp 复制代码
int[] array = numbers.ToArray(); // 转换成数组
  1. ToList
    定义
csharp 复制代码
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source);

功能 :将序列(集合或者数组)转换成列表。
示例

csharp 复制代码
List<int> list = numbers.ToList(); // 转换成列表
  1. Select
    定义
csharp 复制代码
public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, int, TResult> selector);
public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector);

功能 :投影每个元素到新的形式。
示例

csharp 复制代码
var squaredNumbers = numbers.Select(n => n * n); // 将每个元素平方

其他方法

  1. Skip
    定义
csharp 复制代码
public static IEnumerable<TSource> Skip<TSource>(this IEnumerable<TSource> source, int count);

功能 :跳过序列中的前N个元素。
示例:跳过前两个元素

csharp 复制代码
var skipped = numbers.Skip(2); // 跳过前两个元素
  1. Take
    定义
csharp 复制代码
public static IEnumerable<TSource> Take<TSource>(this IEnumerable<TSource> source, Range range);
public static IEnumerable<TSource> Take<TSource>(this IEnumerable<TSource> source, int count);

功能 :获取序列中的前N个元素。
示例:获取前三个元素

csharp 复制代码
var taken = numbers.Take(3); // 获取前三个元素

这些方法提供了强大的数据处理能力,可以根据需要灵活运用。在实际开发中,经常会将这些方法组合起来使用,以达到复杂的数据查询和处理需求。后续会对这些方法结合实例进行详细讲解和应用。

相关推荐
2501_903238653 分钟前
深入理解 JUnit 的 @RunWith 注解与自定义 Runner
数据库·junit·sqlserver·个人开发
编程乐趣10 分钟前
一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略来了!
开发语言·c#
小光学长13 分钟前
基于flask+vue框架的的医院预约挂号系统i1616(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
听封21 分钟前
✨ 索引有哪些缺点以及具体有哪些索引类型
数据库·mysql
利瑞华26 分钟前
数据库索引:缺点与类型全解析
数据库·oracle
V+zmm1013429 分钟前
自驾游拼团小程序的设计与实现(ssm论文源码调试讲解)
java·数据库·微信小程序·小程序·毕业设计
ChinaRainbowSea41 分钟前
1. Linux下 MySQL 的详细安装与使用
linux·数据库·sql·mysql·adb
我是苏苏42 分钟前
C#基础:使用Linq进行简单去重处理(DinstinctBy/反射)
开发语言·c#·linq
小小码农(找工作版)44 分钟前
C#前端开发面试题
开发语言·c#
jay丿2 小时前
Redis 中列表(List)常见命令详解
数据库·redis·list