如何使用泛型为多种数据类型添加常用方法?

时间:2012-03-12 21:38:32

标签: c# generics

我本来应该编写一个方法,它将对整数,float或double的集合执行添加。我打算写三个方法,遍历三种不同的类型执行加法并返回值。有用。我只是很好奇,这可以在一个方法中完成,其中类型传递一个泛型类型,如

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

我能够通过正常的三种方法实现解决它,但只是好奇,它甚至可能吗?

谢谢,

2 个答案:

答案 0 :(得分:6)

对于键入泛型类型参数的表达式,不可能使用+ / - / * / 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相同。请使用它,而不是将其放入您的代码中。

答案 1 :(得分:0)

在接受的答案

中使用表达式树有一个优雅的解决方案

Generic C# Code and the Plus Operator