如何使用泛型为多个数据类型创建添加的通用方法

本文关键字:添加 方法 创建 数据类型 泛型 何使用 | 更新日期: 2023-09-27 18:27:28

我应该写一个方法,它将对integer、float或double的集合执行加法。我打算写一个三种方法,它将遍历三种不同的类型执行加法并返回值。它有效。我只是好奇,这可以在一个单一的方法中完成吗,其中类型被传递一个泛型类型,类似

public static T SUM<T>(IEnumerable<T> dataCollection)
{
T total;
foreach(var value in dataCollection)
total += value;
return total;
}

我能够用普通的三种方法实现来解决这个问题,但只是好奇,这可能吗?

谢谢,

如何使用泛型为多个数据类型创建添加的通用方法

对于类型为泛型类型参数的表达式,不可能使用像+ / - / * / etc ...这样的运算符。这些只有在处理具体类型时才有效。

要使用泛型做到这一点,您需要传入一个抽象,该抽象了解如何在实际类型的T上执行类似+的操作。例如,这里有一个lambda示例

public static T SUM<T>(IEnumerable<T> dataCollection, Func<T, T, T> sum)
{
  T total = default(T);
  foreach(var value in dataCollection)
    total = sum(total, value);
  return total;
}
List<int> list = ...;
list.Sum((left, right) -> left + right);

注意:正如一些人所指出的,我在这里编写的函数与System.Linq.Enumerable.Aggregate基本相同。请使用它,而不是将它放在代码中。