C# IEnumerable延拓法计算其项之和
我想为IEnumerable创建一个扩展方法,用于计算其项的总和并返回总值。只有当类型T是数字类型double、float、int。。。如果IEnumerable是列表、集合或字典,那么这个总和必须不同 我创建此方法的尝试如下所示:C# IEnumerable延拓法计算其项之和,c#,ienumerable,extension-methods,C#,Ienumerable,Extension Methods,我想为IEnumerable创建一个扩展方法,用于计算其项的总和并返回总值。只有当类型T是数字类型double、float、int。。。如果IEnumerable是列表、集合或字典,那么这个总和必须不同 我创建此方法的尝试如下所示: public static class IEnumerableTExtensoes { public static double Sum<T>(this IEnumerable<T> IEnum) { bool
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;
}
}
这根本不起作用
有什么建议吗?让我猜猜:这不起作用,因为T没有定义运算符+ 我可以想出两种方法来解决这个问题,但我无法测试其中任何一种,因此我无法保证它们中的每一种是否都有效,或者是否由于我现在缺少的一些细节而无法实现 一种方法是声明3种不同的方法: 公共静态双sum此IEnumerable ienum 公共静态双Sumthis IEnumerable ienum,和 公共静态双Sumthis IEnumerable ienum
另一种方法是利用所有3种感兴趣的类型都实现IConvertible接口这一事实。所以,你会用where T:I声明Sum方法,然后在循环中,你会把每个值转换成一个已知的公分母,比如说Double,这样你就可以进行求和了,最后你会不知何故,我不确定,也许会用cast?将其转换回T类型,以便返回。为什么不使用LINQ Sum?也就是说,根本不工作不是一个非常具体的问题。请告诉我们您的问题的具体症状。这根本不起作用,根本不是问题描述。请告诉我们这种方法的目的是什么,以及为什么您不能使用内置的求和扩展方法。我不明白。如果我们为您编写此方法,您将如何进行练习?值得注意的是,System.Linq.Enumerable使用了多重载方法,不仅用于求和,还用于最小值、最大值和平均值