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告诉我的是什么。
答案 0 :(得分:6)
没有Sum
重载适用于ushort
序列或一般序列以及对ushort
的投影。最简单的方法是简单地转换为long
:
return _contents.Sum(a => (long) a.Weight);
这也将缓解溢出问题。请注意,使用ulong
也没有重载。如果您有足够的ushort
值来溢出long
,那么无论如何都可能需要一段时间来添加它们:)