IEnumerable <t>扩展方法,用于计算其术语的总和

时间:2017-05-22 19:25:18

标签: c# ienumerable extension-methods

我想为IEnumerable创建一个扩展方法,用于计算其术语的总和并返回总值。仅当类型T是数字类型(double,float,int ...)时,此方法必须执行此求和,并且如果IEnumerable是列表,集合或字典,则此总和必须不同。

我尝试创建此方法如下:

public static class IEnumerableTExtensoes
{
   public static double Sum<T>(this IEnumerable<T> IEnum)
    {
        bool isInt = typeof(T) == typeof(int);
        bool isFloat = typeof(T) == typeof(float);
        bool isDouble = typeof(T) == typeof(double);

        if(isInt || isFloat || isDouble)
        {
            T sum = (double)0;
            foreach(T num in IEnum)
            {
                sum += num;
            }
        }
        return sum;
    }
}

这根本不起作用。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我猜:这不起作用,因为T没有定义operator +

我可以用两种方法来解决这个问题,但是我无法测试其中任何一种,所以我不能保证它们中的每一个是否会起作用,或者它是否会变成由于我现在缺少一些细节,所以不可能。

一种方法是宣布3种不同的方法:

public static double Sum(this IEnumerable<Int32> ienum)

public static double Sum(this IEnumerable<Float> ienum)

public static double Sum(this IEnumerable<Double> ienum)

另一种方法是利用所有3种类型的兴趣实现IConvertible接口的事实。因此,您可以使用Sum<T>()声明where T: IConvertible方法,然后在循环内将每个值转换为已知的公分母,比如Double,以便您可以执行求和,以及然后最后你会(不知何故,我不确定,也许是一个演员?)将它转换回T类型,这样你就可以返回它。