我想为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;
}
}
这根本不起作用。
有什么建议吗?
答案 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
类型,这样你就可以返回它。