c# aggregate
时间: 2025-06-16 07:19:30 浏览: 16
### C# 中 Aggregate 方法的用法及示例
在 C# 中,`Aggregate` 方法是 LINQ(Language Integrated Query)的一部分,用于对集合中的元素执行累积操作。它类似于数学中的累加或乘积运算,但更通用,允许用户定义自定义的累积逻辑[^5]。
#### 基本语法
`Aggregate` 方法的基本语法如下:
```csharp
public static TSource Aggregate<TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func);
```
- `source`: 要聚合的集合。
- `func`: 一个函数,定义了如何将两个元素组合成一个结果。
还有一种带种子值的重载形式:
```csharp
public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func);
```
- `seed`: 聚合操作的初始值。
- `func`: 定义了如何将当前累积值与集合中的下一个元素结合。
最后一种形式支持结果类型转换:
```csharp
public static TResult Aggregate<TSource, TAccumulate, TResult>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector);
```
- `resultSelector`: 将最终累积值转换为所需的结果类型。
#### 示例代码
以下是一些使用 `Aggregate` 方法的示例:
##### 示例 1:计算整数列表的乘积
```csharp
var numbers = new List<int> { 1, 2, 3, 4 };
int product = numbers.Aggregate((acc, num) => acc * num);
// 结果为 24
```
##### 示例 2:带有种子值的字符串连接
```csharp
var words = new List<string> { "Hello", "World" };
string result = words.Aggregate("Start: ", (acc, word) => acc + word + " ");
// 结果为 "Start: Hello World "
```
##### 示例 3:复杂对象的累积操作
```csharp
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
var people = new List<Person>
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 }
};
string names = people.Aggregate("", (acc, person) => acc + person.Name + ",");
// 结果为 "Alice,Bob,"
```
#### 注意事项
- 如果集合为空且未提供种子值,会抛出 `InvalidOperationException`[^6]。
- 在处理复杂数据结构时,确保 `Aggregate` 的逻辑清晰且高效。
#### 性能考量
虽然 `Aggregate` 提供了强大的功能,但在处理大数据集时可能会导致性能问题。在这种情况下,建议使用并行 LINQ 或其他优化方法[^7]。
---
###
阅读全文
相关推荐


















