Варианты реализации суммирования, усреднения, объединения и т. Д. Элементов в IEnumerable - PullRequest
2 голосов
/ 23 января 2009

Я ищу кратчайший код для создания методов для выполнения общих операций над элементами в IEnumerable.

Например:

public interface IPupil
{
    string Name { get; set; }
    int Age { get; set; }
}
  1. Суммирование имущества - например, IPupil.Age в IEnumerable
  2. Усреднение свойства - например, IPupil.Age в IEnumerable
  3. Построение строки CSV - например, IPupil.Name в IEnumerable

Меня интересуют различные подходы к решению этих примеров: foreach (длинная рука), делегаты, LINQ, анонимные методы и т. Д. *

Извините за плохую формулировку, я не могу точно описать, что мне нужно!

1 Ответ

7 голосов
/ 23 января 2009

Суммирование и усреднение: легко с LINQ:

var sum = pupils.Sum(pupil => pupil.Age);
var average = pupils.Average(pupil => pupil.Age);

Построение строки CSV - здесь есть различные варианты, включая написание собственных методов расширения. Это будет работать, хотя:

var csv = string.Join(",", pupils.Select(pupil => pupil.Name).ToArray());

Обратите внимание, что сложно вычислить несколько вещей (например, среднее и сумма) за один проход данных с обычным LINQ. Если вы заинтересованы в этом, взгляните на проект Push LINQ , который мы с Марком Гравеллом написали. Это довольно специфическое требование.

...