您好可以在不更改可枚举类型的情况下更改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)
答案 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
。