是否可以检查' +'可以在编译时应用于Type吗?

时间:2014-08-21 15:02:48

标签: c# generics operators extension-methods

我想写一个通用的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等条件下使用运算符重载的关键字?

0 个答案:

没有答案