C# 如何使用generic为多个数据类型创建添加的通用方法?

C# 如何使用generic为多个数据类型创建添加的通用方法?,c#,generics,C#,Generics,我应该写一个方法,它将对整数、浮点或double的集合执行加法。我打算写一个三种方法,它将遍历三种不同的类型,执行加法并返回值。它起作用了。我只是好奇,这是否可以在一个方法中完成,其中类型被传递给泛型类型,比如 public static T SUM<T>(IEnumerable<T> dataCollection) { T total; foreach(var value in dataCollection) total += value; return total;

我应该写一个方法,它将对整数、浮点或double的集合执行加法。我打算写一个三种方法,它将遍历三种不同的类型,执行加法并返回值。它起作用了。我只是好奇,这是否可以在一个方法中完成,其中类型被传递给泛型类型,比如

public static T SUM<T>(IEnumerable<T> dataCollection)
{
T total;
foreach(var value in dataCollection)
total += value;
return total;
}
公共静态T和(IEnumerable数据采集)
{
T总数;
foreach(数据收集中的var值)
总+=价值;
返回总数;
}
我能够用正常的三种方法实现来解决这个问题,但我只是好奇,这可能吗


谢谢,

对于键入到泛型类型参数的表达式,不可能使用像
+/-/*/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);
publicstatict-SUM(IEnumerabledatacollection,Func-SUM)
{
T总计=默认值(T);
foreach(数据收集中的var值)
总计=总和(总计,值);
返回总数;
}
列表=。。。;
list.Sum((左、右)->左+右);

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

当然,这只不过是一个roll your own Aggregate()函数,因为传递的lambda可以是从左-右到左/右的任意函数。@Nair,请注意,这个函数已经存在,请尝试使用它,除非你这样做是为了学习。是的,这也是学习经验的一部分,我也不知道聚合。@JaredPar在上面的方法中,sum(total,value)编译器比较total not assigned。