# Enumerable.AggregateEnumerable.AggregateEnumerable.AggregateEnumerable.Aggregate Method

## 重载

 Aggregate(IEnumerable, TAccumulate, Func, Func) Aggregate(IEnumerable, TAccumulate, Func, Func) Aggregate(IEnumerable, TAccumulate, Func, Func) Aggregate(IEnumerable, TAccumulate, Func, Func) 对序列应用累加器函数。Applies an accumulator function over a sequence. 将指定的种子值用作累加器的初始值，并使用指定的函数选择结果值。The specified seed value is used as the initial accumulator value, and the specified function is used to select the result value. Aggregate(IEnumerable, TAccumulate, Func) Aggregate(IEnumerable, TAccumulate, Func) Aggregate(IEnumerable, TAccumulate, Func) Aggregate(IEnumerable, TAccumulate, Func) 对序列应用累加器函数。Applies an accumulator function over a sequence. 将指定的种子值用作累加器初始值。The specified seed value is used as the initial accumulator value. Aggregate(IEnumerable, Func) Aggregate(IEnumerable, Func) Aggregate(IEnumerable, Func) Aggregate(IEnumerable, Func) 对序列应用累加器函数。Applies an accumulator function over a sequence.

## Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)

``````public:
generic <typename TSource, typename TAccumulate, typename TResult>
[System::Runtime::CompilerServices::Extension]
static TResult Aggregate(System::Collections::Generic::IEnumerable<TSource> ^ source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> ^ func, Func<TAccumulate, TResult> ^ resultSelector);``````
``public static TResult Aggregate<TSource,TAccumulate,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate,TSource,TAccumulate> func, Func<TAccumulate,TResult> resultSelector);``
``static member Aggregate : seq<'Source> * 'Accumulate * Func<'Accumulate, 'Source, 'Accumulate> * Func<'Accumulate, 'Result> -> 'Result``
``````<Extension()>
Public Function Aggregate(Of TSource, TAccumulate, TResult) (source As IEnumerable(Of TSource), seed As TAccumulate, func As Func(Of TAccumulate, TSource, TAccumulate), resultSelector As Func(Of TAccumulate, TResult)) As TResult``````

#### 类型参数

TSource

`source` 的元素类型。The type of the elements of `source`.

TAccumulate

TResult

#### 参数

source
IEnumerable<TSource>

seed
TAccumulate TAccumulate TAccumulate TAccumulate

func
Func<TAccumulate,TSource,TAccumulate>

resultSelector
Func<TAccumulate,TResult>

#### 返回

TResult TResult TResult TResult

#### 异常

`source``func``resultSelector``null``source` or `func` or `resultSelector` is `null`.

### 示例

``````string[] fruits = { "apple", "mango", "orange", "passionfruit", "grape" };

// Determine whether any string in the array is longer than "banana".
string longestName =
fruits.Aggregate("banana",
(longest, next) =>
next.Length > longest.Length ? next : longest,
// Return the final result as an upper case string.
fruit => fruit.ToUpper());

Console.WriteLine(
"The fruit with the longest name is {0}.",
longestName);

// This code produces the following output:
//
// The fruit with the longest name is PASSIONFRUIT.
``````
``````Sub AggregateEx3()
Dim fruits() As String =
{"apple", "mango", "orange", "passionfruit", "grape"}

' Determine whether any string in the array is longer than "banana".
Dim longestName As String =
fruits.Aggregate("banana",
Function(ByVal longest, ByVal fruit) _
IIf(fruit.Length > longest.Length, fruit, longest),
Function(ByVal fruit) fruit.ToUpper())

' Display the output.
MsgBox("The fruit with the longest name is " & longestName)
End Sub

' This code produces the following output:
'
' The fruit with the longest name is PASSIONFRUIT
``````

### 注解

The Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>) method makes it simple to perform a calculation over a sequence of values. 通过调用此方法适用`func`中每个元素的一次`source`This method works by calling `func` one time for each element in `source`. 每次`func`调用时，Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)将传递两个元素的序列，并聚合的值 (作为第一个参数`func`)。Each time `func` is called, Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>) passes both the element from the sequence and an aggregated value (as the first argument to `func`). `seed`参数用作初始的聚合值。The value of the `seed` parameter is used as the initial aggregate value. 结果`func`替换以前的聚合的值。The result of `func` replaces the previous aggregated value. 最终结果`func`传递给`resultSelector`若要获取的最终结果Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)The final result of `func` is passed to `resultSelector` to obtain the final result of Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>).

## Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>)Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>)Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>)Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>)

``````public:
generic <typename TSource, typename TAccumulate>
[System::Runtime::CompilerServices::Extension]
static TAccumulate Aggregate(System::Collections::Generic::IEnumerable<TSource> ^ source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> ^ func);``````
``public static TAccumulate Aggregate<TSource,TAccumulate> (this System.Collections.Generic.IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate,TSource,TAccumulate> func);``
``static member Aggregate : seq<'Source> * 'Accumulate * Func<'Accumulate, 'Source, 'Accumulate> -> 'Accumulate``
``````<Extension()>
Public Function Aggregate(Of TSource, TAccumulate) (source As IEnumerable(Of TSource), seed As TAccumulate, func As Func(Of TAccumulate, TSource, TAccumulate)) As TAccumulate``````

#### 类型参数

TSource

`source` 的元素类型。The type of the elements of `source`.

TAccumulate

#### 参数

source
IEnumerable<TSource>

seed
TAccumulate TAccumulate TAccumulate TAccumulate

func
Func<TAccumulate,TSource,TAccumulate>

#### 返回

TAccumulate TAccumulate TAccumulate TAccumulate

#### 异常

`source``func``null``source` or `func` is `null`.

### 示例

``````int[] ints = { 4, 8, 8, 3, 9, 0, 7, 8, 2 };

// Count the even numbers in the array, using a seed value of 0.
int numEven = ints.Aggregate(0, (total, next) =>
next % 2 == 0 ? total + 1 : total);

Console.WriteLine("The number of even integers is: {0}", numEven);

// This code produces the following output:
//
// The number of even integers is: 6
``````
``````Sub AggregateEx2()
' Create an array of Integers.
Dim ints() As Integer = {4, 8, 8, 3, 9, 0, 7, 8, 2}

' Count the even numbers in the array, using a seed value of 0.
Dim numEven As Integer =
ints.Aggregate(0,
Function(ByVal total, ByVal number) _
IIf(number Mod 2 = 0, total + 1, total))

' Display the output.
MsgBox("The number of even integers is " & numEven)
End Sub

' This code produces the following output:
'
'The number of even integers is 6
``````

### 注解

The Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>) method makes it simple to perform a calculation over a sequence of values. 通过调用此方法适用`func`中每个元素的一次`source`This method works by calling `func` one time for each element in `source`. 每次`func`调用时，Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>)将传递两个元素的序列，并聚合的值 (作为第一个参数`func`)。Each time `func` is called, Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>) passes both the element from the sequence and an aggregated value (as the first argument to `func`). `seed`参数用作初始的聚合值。The value of the `seed` parameter is used as the initial aggregate value. 结果`func`替换以前的聚合的值。The result of `func` replaces the previous aggregated value. Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>) returns the final result of `func`.

## Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>)Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>)Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>)Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>)

``````public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static TSource Aggregate(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TSource, TSource> ^ func);``````
``public static TSource Aggregate<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TSource,TSource> func);``
``static member Aggregate : seq<'Source> * Func<'Source, 'Source, 'Source> -> 'Source``
``````<Extension()>
Public Function Aggregate(Of TSource) (source As IEnumerable(Of TSource), func As Func(Of TSource, TSource, TSource)) As TSource``````

#### 类型参数

TSource

`source` 的元素类型。The type of the elements of `source`.

#### 参数

source
IEnumerable<TSource>

func
Func<TSource,TSource,TSource>

#### 返回

TSource TSource TSource TSource

#### 异常

`source``func``null``source` or `func` is `null`.

`source` 中不包含任何元素。`source` contains no elements.

### 示例

``````string sentence = "the quick brown fox jumps over the lazy dog";

// Split the string into individual words.
string[] words = sentence.Split(' ');

// Prepend each word to the beginning of the
// new sentence to reverse the word order.
string reversed = words.Aggregate((workingSentence, next) =>
next + " " + workingSentence);

Console.WriteLine(reversed);

// This code produces the following output:
//
// dog lazy the over jumps fox brown quick the
``````
``````Sub AggregateEx1()
Dim sentence As String =
"the quick brown fox jumps over the lazy dog"
' Split the string into individual words.
Dim words() As String = sentence.Split(" "c)
' Prepend each word to the beginning of the new sentence to reverse the word order.
Dim reversed As String =
words.Aggregate(Function(ByVal current, ByVal word) word & " " & current)

' Display the output.
MsgBox(reversed)
End Sub

' This code produces the following output:
'
' dog lazy the over jumps fox brown quick the
``````

### 注解

The Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>) method makes it simple to perform a calculation over a sequence of values. 通过调用此方法适用`func`中每个元素的一次`source`除第一个。This method works by calling `func` one time for each element in `source` except the first one. 每次`func`调用时，Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>)将传递两个元素的序列，并聚合的值 (作为第一个参数`func`)。Each time `func` is called, Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>) passes both the element from the sequence and an aggregated value (as the first argument to `func`). 第一个元素`source`用作初始的聚合值。The first element of `source` is used as the initial aggregate value. 结果`func`替换以前的聚合的值。The result of `func` replaces the previous aggregated value. Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>) 返回的最终结果`func`Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>) returns the final result of `func`.