c# - 如何实现泛型方法对不同的值类型进行数学计算

标签 c# generics

我有一个方法可以接受 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/

相关文章:

c# - 在 C# 的通用列表中合并具有相同类型的项目的最有效方法是什么?

java - 泛型类的 Arraylist

typescript - 编写一个在泛型上使用查找类型的函数

java - 获取通用数组类

c# - 设置列值时出现 StrongTypingException

c# - 对 rtfbox 和文本文件中的字符串数组进行排序/排序

c# - 如何在 WPF 的图像控件中分配 System.Drawing.Image 对象

java - 如何将我的方法参数限制为仅用于 Set 和 List 类型的集合,而不是 Map?

c# - API问题中的异常处理

c# - 为什么 Visual Studio 2010 中未到达断点?