Почему .ForEach () в IList <T>, а не в IEnumerable <T>? [Дубликат]

Возможный дубликат:
Почему в интерфейсе IEnumerable отсутствует метод расширения ForEach?

Я заметил, что при написании кода LINQ-y .ForEach () - это хорошая идиома. Например, вот фрагмент кода, который принимает следующие входные данные и производит эти выходные данные:

{ "One" } => "One"
{ "One", "Two" } => "One, Two"
{ "One", "Two", "Three", "Four" } => "One, Two, Three and Four";

И код:

private string InsertCommasAttempt(IEnumerable<string> words)
{
    List<string> wordList = words.ToList();
    StringBuilder sb = new StringBuilder();
    var wordsAndSeparators = wordList.Select((string word, int pos) =>
        {
            if (pos == 0) return new { Word = word, Leading = string.Empty };
            if (pos == wordList.Count - 1) return new { Word = word, Leading = " and " };
            return new { Word = word, Leading = ", " };
        });

    wordsAndSeparators.ToList().ForEach(v => sb.Append(v.Leading).Append(v.Word));
    return sb.ToString();
}

Обратите внимание на вставленный .ToList () перед .ForEach () со второй до последней строки.

Почему .ForEach () недоступен в качестве метода расширения в IEnumerable? С таким примером это кажется странным.

Заранее спасибо,

Дейв

Ответы на вопрос(10)

Ваш ответ на вопрос