Enumerable.Sum绑定到数组类型

本文关键字:数组 类型 绑定 Sum Enumerable | 更新日期: 2023-09-27 18:07:07

我对LINQ求和方法是如何工作的感到困惑。例如,我们有一个int数组,而int结构没有sum方法。

但是当我们包含LINQ时,它就神奇地做到了。如何将sum方法添加到结构中,以便我们可以调用arr.sum() ?通过某种继承还是怎样?

Enumerable.Sum绑定到数组类型

如何将sum方法添加到结构

大多数集合类实现IEnumerable<T>Sum,在你的例子中,是IEnumerable<T>的扩展方法。

扩展方法本质上是带有静态方法的静态类,其中每个方法的第一个值都添加了this关键字。这样,编译器将其识别为应用于该类型的扩展方法。

以下是Enumerable.SumIEnumerable<decimal>上声明的最简单形式:

public static decimal Sum(this IEnumerable<decimal> source) 
{
    if (source == null) throw Error.ArgumentNull("source");
    decimal sum = 0;
    foreach (decimal v in source) sum += v;
    return sum;
}

Sum有很多重载,每个重载都有不同类型的整型和浮点型。如果你感兴趣的话,可以在这里找到。所有扩展方法都应用于给定的类型。如果一个数组实现了IEnumerable<T>,那么它也会获得这些方法作为附加。