我有以下代码
IEnumerable<int> numbers =
Enumerable.Range(1, 5)
.Reverse();
Func<int, string> outputFormat = x => x + "...";
IEnumerable<string> countdown = numbers.Select(outputFormat);
foreach (string s in countdown)
{
Console.WriteLine(s);
}
有没有办法从代码中“消除”foreach循环,比如
Console.Write(countdown.EnumerateOverItems())
没有实际编写自定义方法(例如以某种方式使用LINQ或委托)?
答案 0 :(得分:5)
这应该可以解决问题:
Console.WriteLine(string.Join(Environment.NewLine, countdown));
答案 1 :(得分:2)
您可以使用以下代码:
Console.WriteLine(string.Join(Environment.NewLine, countdown));
请注意,在早期版本的.NET中,string.Join
只有IEnumerable<T>
,只有string[]
没有重载,在这种情况下,您需要以下内容:
Console.WriteLine(string.Join(Environment.NewLine, countdown.ToArray()));
为了完整性,如果集合中不包含string
元素,则可以执行以下操作:
Console.WriteLine(string.Join(Environment.NewLine, countdown.Select(v => v.ToString()).ToArray()));
答案 2 :(得分:1)
您可以使用扩展方法:
public static void WriteLines<T> (this IEnumerable<T> @this)
{
foreach (T item in @this)
Console.WriteLine(item);
}
用法:
new[]{ "a", "b" }.WriteLines();
优点:
Disadvatages: