如何使用 LINQ 打印数字

发布于 2024-11-07 19:21:11 字数 170 浏览 0 评论 0原文

我正在尝试使用 LINQ 打印从 1 到 100 的自然数,并且不使用任何循环。我编写的 LINQ 查询根本无法编译。

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

请帮我。

I am trying to print natural numbers from 1 to 100 using LINQ and without any loops. The LINQ query I wrote doesn't even compile at all.

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

Please help me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

愁以何悠 2024-11-14 19:21:11

方法语法:

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)));

该列表使用 String.Join(String, IEnumerable).NET 4.0 中引入的重载。

Method syntax:

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

Query syntax:

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

Or, if you want a comma separated list:

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

This one uses the String.Join<T>(String, IEnumerable<T>) overload introduced in .NET 4.0.

把时间冻结 2024-11-14 19:21:11

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

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

希望这有帮助

Your LINQ query is almost near to the solution, only some tweaking is needed.

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

Hope this helps

清泪尽 2024-11-14 19:21:11

尝试一下:

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

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

Try this:

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

You can also add ForEach as an extension method to IEnumerable instead of having to convert to list first, if you desire a little better performance.

云淡风轻 2024-11-14 19:21:11

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

纠正一下,LINQ 中存在循环,只是它们隐藏在您的视线之外。

LINQ is query language. It can only filter and transform data. That what LINQ is inteded for.
Of course there will be some ForEach extension, but that is not part of LINQ itself.

And just to correct you, there are loops in LINQ, except they are hidden from your sight.

妄想挽回 2024-11-14 19:21:11

不可能在没有任何循环的情况下遍历数组,您可以使用 List 类的 ForEach 扩展方法。

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

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

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

 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);
    }
 }

It is imposible to walko over an array without any loops, you can use the ForEach extention method for List class.

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

I dont know why you would like do this, but the loop might not be writen by you but eventually in some part of code will be presented.

EDIT:
Any solution presented will have somewhere some loop or even two, if you just want to iterate through all elements, you should create an extension where you hide the for each

 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);
    }
 }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文