如何实现通用方法以对不同的值类型进行数学计算

zsh*_*arp 5 c# generics

我有一个接受IEnumerable-decimals并执行各种数学函数的方法。我想对IEnumerable-int-使用相同的方法。我该如何实施?例如找到一个简单的总和?

void Calculate<T>(IEnumerable <T> ListOFNumbers)
{
   int count= ListofNumbers.Count();
   ?sum=?;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 5

这一切都在MiscUtil 中免费提供。本Operator类提供对通用运算; 和有通用的实现(如扩展方法)SumAverage等-和作品与任何类型的与除原语适合的运算符。例如,您可以将 Sum 与 ofComplex<T>等一起使用。

请注意,它目前使用 .NET 3.5;我确实在某处有一个 2.0 版本,但它没有经过测试......

使用文档中显示了 sum的简化示例:

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;
}
Run Code Online (Sandbox Code Playgroud)

虽然 IIRC 的实际实现有更多......

顺便说一句,请注意dynamic(在 .NET 4.0 / C# 4.0 中)据说支持运算符,但我们必须等待测试版才能看到它的作用。从我之前dynamic在 CTP 中的观察来看,我预计它会比 MiscUtil 代码慢一点,但我们会看到。