有没有办法在一个Console.Write(行)中编写完整的IEnumerable <t>?</t>

时间:2014-08-08 12:34:29

标签: c# ienumerable console.writeline

我有以下代码

    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或委托)?

3 个答案:

答案 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();

优点:

  1. 将减少字符串分配。
  2. 减少使用代码。
  3. Disadvatages:

    1. 自定义方式,模式代码。