集合<t> .Sum(a =&gt; a.ushortProperty)到ulong </t>

时间:2011-08-14 22:29:04

标签: c# sum

public class Foo
{
    public ushort Weight { get; }
}
public class Bar<T> : IEnumerable where T : Foo
{
    private Collection<T> _contents;
    ...
    public ulong TotalWeight { get { return _contents.Sum(a => a.Weight); } }
}

我期望总数加起来超过ushort的最大值。

我收到了一个Intellisense错误:“模糊调用”,其中包含一个不包含ushort或ulong的数字类型列表。我不确定它想要什么。

我也尝试过使用Select(来自this post),如下所示:

_contents.Select(a => a.Weight).Sum()

但是Intellisense抱怨说它无法解析Sum方法并列出了一堆也不包括ushort或ulong的候选者。再一次,我不确定它想要什么。

如果这真的很新鲜,我道歉,我只是不明白Intellisense告诉我的是什么。

1 个答案:

答案 0 :(得分:6)

没有Sum重载适用于ushort序列或一般序列以及对ushort的投影。最简单的方法是简单地转换为long

return _contents.Sum(a => (long) a.Weight);

这也将缓解溢出问题。请注意,使用ulong也没有重载。如果您有足够的ushort值来溢出long,那么无论如何都可能需要一段时间来添加它们:)