我正在尝试使用 LINQ 打印从 1 到 100 的自然数,并且没有任何循环。我编写的 LINQ 查询甚至根本不编译。
Console.WriteLine(from n in Enumerable.Range(1, 100).ToArray());
请帮助我。
方法语法:
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
您的 LINQ 查询几乎接近解决方案,只需要进行一些调整。
Console.WriteLine(String.Join(", ", (from n in Enumerable.Range(1, 100) select n.ToString()).ToArray()));
希望这有帮助
试试这个:
Enumerable.Range(1, 100).ToList().ForEach(x => Console.WriteLine(x));
如果您希望获得更好的性能,还可以将 ForEach 作为扩展方法添加到 IEnumerable,而不必先转换为列表。
LINQ 是查询语言。它只能过滤和转换数据。这就是 LINQ 的目的。当然会有一些 ForEach 扩展,但这不是 LINQ 本身的一部分。
为了纠正您,LINQ 中有一些循环,只是它们隐藏在您的视线之外。
没有任何循环的情况下遍历数组是不可能的,您可以使用 Listclass 的 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);
}
}