c#Enumerable.Sum更改返回类型

时间:2014-04-27 00:00:57

标签: c# types enumerable

您好可以在不更改可枚举类型的情况下更改Sum返回类型吗?

string func(int a)
{
    return (from el in Enumerable.Range(0, a >> 1) select el << 1).Sum().ToString();
}

我希望将Sum()作为

的int64
(from el in Enumerable.Range(0, a >> 1) select el << 1)

1 个答案:

答案 0 :(得分:2)

Sum 始终使用可枚举的类型(或映射函数的结果类型)并具有overloads for the different numeric types。在这种情况下,只需更改Select as so即可将值添加为longs 1 (结果为long)。

// uses: long Enumerable.Sum(IEnumerable<long> t)
(.. select (long)(el << 1)).Sum()

或者,使用映射函数中的重载。

// uses: long Enumerable.Sum(IEnumerable<T> t, Func<T,long> f)
(.. select el << 1).Sum(i => (long)i)

要仅将结果作为不同的类型(不影响用于求和的类型),只需在结尾处执行转换/转换。因为这只会在总和之后改变类型,它会影响Sum函数中的精度和范围/溢出,这与前面显示的两种方法不同。

(long)(.. select el << 1).Sum()

1 在C#中,long System.Int64