Коллекция <T>.Sum (a => a.ushortProperty) в ulong - PullRequest
4 голосов
/ 15 августа 2011
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 (из этого поста ), как показано ниже:

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

но Intellisense жалуется, что не может разрешить метод Sum, и перечисляет группу кандидатов, в которую также не входит ushort или ulong. Опять же, я не уверен, чего он хочет.

Я прошу прощения, если это действительно новичок, я просто не понимаю, что говорит Intellisense.

1 Ответ

6 голосов
/ 15 августа 2011

Перегрузка Sum отсутствует, которая применяется к последовательности ushort или к общей последовательности и проекции на ushort.Простейшим подходом было бы просто привести к long:

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

Это также облегчит проблему переполнения.Обратите внимание, что при использовании ulong перегрузки также нет.Если у вас достаточно значений ushort для переполнения long, вероятно, потребуется какое-то время, чтобы добавить их в любом случае:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...