可能是重复问题:
为什么在IEnumerable接口上没有ForEach扩展方法?
我发现当编写LINQ代码时,使用.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();
}
注意在倒数第二行的.ForEach()
之前插入的.ToList()
。
为什么.ForEach()
不是IEnumerable<T>
上的扩展方法?像这样的示例,它似乎有点奇怪。