我本来应该写一个方法,它将在整数,浮点或双精度的集合上执行加法.我打算写三个方法,遍历三种不同的类型执行加法并返回值.有用.我只是很好奇,这可以在一个方法中完成,其中类型传递给泛型类型,类似于
public static T SUM<T>(IEnumerable<T> dataCollection)
{
T total;
foreach(var value in dataCollection)
total += value;
return total;
}
Run Code Online (Sandbox Code Playgroud)
我能够通过正常的三种方法实现解决它,但只是好奇,它甚至可能吗?
谢谢,
不能使用类似于+ / - / * / 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);
Run Code Online (Sandbox Code Playgroud)
注意:有几个人指出我在这里写的功能基本上是相同的System.Linq.Enumerable.Aggregate.请使用它,而不是将其放入您的代码中.