我有一个方法可以接受 IEnumerable-decimals 并执行各种数学函数。我想在 IEnumerable-int- 上使用相同的方法。我该如何实现?例如求一个简单的总和?
void Calculate<T>(IEnumerable <T> ListOFNumbers)
{
int count= ListofNumbers.Count();
?sum=?;
}
最佳答案
这一切都可以在 MiscUtil 中免费获得. Operator
类提供对通用算术的访问;并且有 Sum
的通用实现(作为扩展方法) , Average
, 等等 - 除了基元之外,还可以使用 any 类型和合适的运算符。因此,例如,您可以将 Sum 与 Complex<T>
一起使用等
请注意,它目前使用 .NET 3.5;我在某处确实有一个 2.0 版本,但它没有经过测试....
求和的简化示例显示在 usage document 中。 :
public static T Sum<T>(this IEnumerable<T> source)
{
T sum = Operator<T>.Zero;
foreach (T value in source)
{
if (value != null)
{
sum = Operator.Add(sum, value);
}
}
return sum;
}
尽管 IIRC 的实际实现还有更多...
顺便说一句,请注意 dynamic
(在 .NET 4.0/C# 4.0 中)据说支持运算符,但我们必须等待测试版才能看到它的作用。从我以前看dynamic
在 CTP 中,我预计它会比 MiscUtil 代码慢一点,但我们会看到。
关于c# - 如何实现泛型方法对不同的值类型进行数学计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/814202/