1

我有以下代码

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

4

3 回答 3

6

这应该可以解决问题:

Console.WriteLine(string.Join(Environment.NewLine, countdown));
于 2014-08-08T12:37:01.567 回答
2

您可以使用以下代码:

Console.WriteLine(string.Join(Environment.NewLine, countdown));

string.Join请注意,在旧版本的 .NET 中, take没有重载IEnumerable<T>,只有 a string[],在这种情况下,您需要以下内容:

Console.WriteLine(string.Join(Environment.NewLine, countdown.ToArray()));

为了完整起见,如果集合不包含string元素,您可以这样做:

Console.WriteLine(string.Join(Environment.NewLine, countdown.Select(v => v.ToString()).ToArray()));
于 2014-08-08T12:36:39.847 回答
1

您可以使用扩展方法:

public static void WriteLines<T> (this IEnumerable<T> @this)
{
    foreach (T item in @this)
        Console.WriteLine(item);
}

用法:

new[]{ "a", "b" }.WriteLines();

好处:

  1. 将有更少的字符串分配。
  2. 更少的使用代码。

缺点:

  1. 自定义方法,模式代码。
于 2014-08-08T12:41:29.487 回答