我正在尝试使用LINQ打印从1到100的自然数,并且没有任何循环。我写的LINQ查询甚至都没有编译。
Console.WriteLine(from n in Enumerable.Range(1, 100).ToArray());
请帮帮我。
答案 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中有循环,除了它们隐藏在你的视线之外。