C # Список объектов, как я могу получить сумму свойства

У меня есть список объектов. Одно свойство отдельной записи объекта – это сумма. Как получить сумму суммы?

Если бы мой список был типа double, я мог бы сделать что-то вроде этого:

double total = myList.Sum(); 

Однако я хочу нечто подобное этому, но этот синтаксис неверен.

 double total = myList.amount.Sum(); 

Как мне это сделать? Я хотел бы использовать функцию Sum, если это возможно, вместо того, чтобы перебирать и вычислять значение.

 using System.Linq; 

 double total = myList.Sum(item => item.Amount); 

И если вам нужно сделать это на элементах, которые соответствуют определенному условию …

 double total = myList.Where(item => item.Name == "Eggs").Sum(item => item.Amount); 

Другая альтернатива:

 myPlanetsList.Select(i => i.Moons).Sum(); 

Вот пример кода, который вы могли бы запустить, чтобы выполнить такой тест:

 var f = 10000000; var p = new int[f]; for(int i = 0; i < f; ++i) { p[i] = i % 2; } var time = DateTime.Now; p.Sum(); Console.WriteLine(DateTime.Now - time); int x = 0; time = DateTime.Now; foreach(var item in p){ x += item; } Console.WriteLine(DateTime.Now - time); x = 0; time = DateTime.Now; for(int i = 0, j = f; i < j; ++i){ x += p[i]; } Console.WriteLine(DateTime.Now - time); 

Тот же пример для сложного объекта:

 void Main() { var f = 10000000; var p = new Test[f]; for(int i = 0; i < f; ++i) { p[i] = new Test(); p[i].Property = i % 2; } var time = DateTime.Now; p.Sum(k => k.Property); Console.WriteLine(DateTime.Now - time); int x = 0; time = DateTime.Now; foreach(var item in p){ x += item.Property; } Console.WriteLine(DateTime.Now - time); x = 0; time = DateTime.Now; for(int i = 0, j = f; i < j; ++i){ x += p[i].Property; } Console.WriteLine(DateTime.Now - time); } class Test { public int Property { get; set; } } 

Мои результаты с оптимизацией компилятора отключены:

 00:00:00.0570370 : Sum() 00:00:00.0250180 : Foreach() 00:00:00.0430272 : For(...) 

и для второго теста:

 00:00:00.1450955 : Sum() 00:00:00.0650430 : Foreach() 00:00:00.0690510 : For() 

похоже, что LINQ обычно медленнее, чем foreach (...), но для меня странно, что foreach (...) кажется быстрее, чем для цикла.

Interesting Posts

Игнорировать пространства имен в LINQ to XML

Firefox: Любой способ указать белые или черные списки для трекера истории?

Как определить направление движения между левым / правым и вверх / вниз

Code First: Независимые ассоциации против иностранных ассоциаций?

Программно зарегистрировать широковещательный приемник

Объединение потоков в Thunderbird

Почему «переполнение: скрытое» очищает поплавок?

Chrome: источник почтовых данных?

C пропускает одну команду функции?

Возможно ли переключить отключенные / активированные устройства из командной строки, аналогично диспетчеру устройств?

Может ли индикатор выполнения работать в classе за пределами основного?

Почему мы не должны использовать защищенный static в java

Windows XP PRO SP3 – остановить изменения ключа ключа безопасности, установленного неизвестной программой

есть ли css-хак для safari только НЕ хром?

Предложения для отладки таблиц стилей печати?

Давайте будем гением компьютера.