c#可枚举.求和方法不';t型支架
对于c#c#可枚举.求和方法不';t型支架,c#,linq,lambda,C#,Linq,Lambda,对于c#Enumerable.Sum方法(IEnumerable,Func)不支持将ulong类型作为方法的返回类型,除非我将ulong强制转换为long public class A { public ulong id {get;set;} } publec Class B { public void SomeMethod(IList<A> listOfA) { ulong result = listofA.Sum(A => A
Enumerable.Sum方法(IEnumerable,Func)
不支持将ulong
类型作为方法的返回类型,除非我将ulong强制转换为long
public class A
{
public ulong id {get;set;}
}
publec Class B
{
public void SomeMethod(IList<A> listOfA)
{
ulong result = listofA.Sum(A => A.Id);
}
}
公共A类
{
公共ulong id{get;set;}
}
B级公共图书馆
{
公共方法(IList)
除非我这样做
ulong result=(ulong)listOfA.Sum(A=>(long)A.Id)
有没有办法不用强制转换就解决这个问题?谢谢!您可以使用Aggregate
ulong result = listOfULongs.Aggregate((a,c) => a + c);
或者在你的具体情况下
ulong result = listOfA.Aggregate(0UL, (a,c) => a + c.Id);
您也应该首先考虑是否应该使用一个无符号值类型。
您可以编写自己的扩展方法来提供<代码> ULUN < /代码>的超载,因为它没有被提供为BCL:的一部分。
public static ulong Sum<TSource>(
this IEnumerable<TSource> source, Func<TSource, ulong> summer)
{
ulong total = 0;
foreach(var item in source)
total += summer(item);
return total;
}
公共静态ulong Sum(
此IEnumerable源,Func summer)
{
ulong总数=0;
foreach(源中的var项)
总计+=夏季(项目);
返回总数;
}
答案不错,但这会导致编译器错误“CS0165使用未分配的局部变量‘total’”。你需要明确地分配总数。
。谢谢,我是用SO编写代码的,没有通过编译器运行,我会更新它。谢谢回答!扩展方法似乎是一个很好的解决方案!@PhilipPittle-你有/使用LINQPad吗?@PhilipPittle-我想这意味着你在其他机器上使用它,你知道它有多好,除其他外,用于测试代码。谢谢,这似乎是解决问题的好方法。我之所以使用ulong
是因为Id不能为负数。你认为我真的应该使用long
来代替吗?@Z.Z.-如果你没有处理负数,并且你的总和超过9223372036854775,807
,但不超过18446744073709551615
,那么ulong
是个好主意。否则long
是个完美的选择。