c#Enumerable.Sum方法不支持ulong类型

Z.Z*_*.Z. 8 c# linq lambda

因为c#Enumerable.Sum<TSource> Method (IEnumerable<TSource>, Func<TSource, Int64>)不支持ulong类型作为Mehtonf的返回类型,除非我将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);
    }
}
Run Code Online (Sandbox Code Playgroud)

compliler会抛出两个错误:

  1. 在此输入图像描述
  2. 在此输入图像描述

    除非我这样做

ulong result = (ulong)listOfA.Sum(A => (long)A.Id)

无论如何没有铸造解决这个问题?谢谢!

juh*_*arr 15

你可以Aggregate改用.

ulong result = listOfULongs.Aggregate((a,c) => a + c);
Run Code Online (Sandbox Code Playgroud)

或者在你的具体情况下

ulong result = listOfA.Aggregate(0UL, (a,c) => a + c.Id);
Run Code Online (Sandbox Code Playgroud)

您还应该考虑是否真的应该首先使用无符号值类型.

  • @ZZ - 如果你没有处理负数并且你的总和的结果超过了'9,223,372,036,854,775,807`,但是不超过'18,446,744,073,709,551,615`那么`ulong`是个好主意.否则`long`是一个非常好的选择. (2认同)

Phi*_*tle 6

您可以编写自己的扩展方法来提供重载,ulong因为它不是作为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;
}
Run Code Online (Sandbox Code Playgroud)