如何使用LINQ打印数字

时间:2011-05-18 09:46:45

标签: c# .net linq

我正在尝试使用LINQ打印从1到100的自然数,并且没有任何循环。我写的LINQ查询甚至都没有编译。

Console.WriteLine(from n in Enumerable.Range(1, 100).ToArray());

请帮帮我。

5 个答案:

答案 0 :(得分:15)

方法语法:

Enumerable.Range(1, 100).ToList().ForEach(Console.WriteLine);

查询语法:

(from n in Enumerable.Range(1, 100) select n)
    .ToList().ForEach(Console.WriteLine);

或者,如果你想要一个以逗号分隔的列表:

Console.WriteLine(string.Join(",", Enumerable.Range(1, 100)));

这个使用.NET 4.0中引入的String.Join<T>(String, IEnumerable<T>)重载。

答案 1 :(得分:4)

您的LINQ查询几乎接近解决方案,只需要进行一些调整。

Console.WriteLine(String.Join(", ", (from n in Enumerable.Range(1, 100) select n.ToString()).ToArray()));

希望这有帮助

答案 2 :(得分:1)

试试这个:

Enumerable.Range(1, 100).ToList().ForEach(x => Console.WriteLine(x));

如果您希望获得更好的性能,您还可以将ForEach作为扩展方法添加到IEnumerable,而不必先转换为列表。

答案 3 :(得分:0)

对没有任何循环的数组进行walko是不可能的,你可以使用List类的ForEach扩展方法。

Enumerable.Range(1,100).ToList().ForEach( i => Console.WriteLine(i));

我不知道你为什么要这样做,但循环可能不是你写的,但最终会在代码的某些部分出现。

编辑: 所提出的任何解决方案都会有某些循环甚至两个循环,如果你只想迭代所有元素,你应该创建一个扩展,你隐藏每个

 public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action)
 {
     if (action == null)
    {
        ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
    }

    foreach(T item in enumeration)
    {
        action(item);
    }
 }

答案 4 :(得分:0)

LINQ是查询语言。它只能过滤和转换数据。那就是LINQ的意图。 当然会有一些ForEach扩展,但这不是LINQ本身的一部分。

只是为了纠正你,LINQ中有循环,除了它们隐藏在你的视线之外。