我想写一个通用的CumulativeSum
方法。这是代码
public static IEnumerable<T> CumulativeSum<T>(this IEnumerable<T> source) where T : struct
{
T sum = default(T);
foreach (T i in source)
{
sum += i; // Operator '+=' cannot be applied to operands of type 'T' and 'T'
yield return sum;
}
}
如评论中所示(和预期一样),编译器无法知道T
是否可以添加到T
,因此会出错。
一种解决方案是为我需要的每种类型编写扩展方法。
另一种解决方案是将T sum = default(T);
替换为dynamic sum = default(T);
。但这可能会导致运行时错误(对我来说仍然是最好的方式)。
我是否可以在使用where T : struct
等条件下使用运算符重载的关键字?