C# 循环的Lambda表达式转换以显示列表

C# 循环的Lambda表达式转换以显示列表,c#,list,lambda,functional-programming,C#,List,Lambda,Functional Programming,我正在尝试学习lambda表达式的使用,因此在阅读文档和其他各种相关文章之后,仍然难以实现。 所以,如果我想将下面的循环转换为lambda表达式,那么我将如何进行转换,我只需要一种方法来了解lambda表达式是如何工作的。 代码: var pc = Enumerable.Range(2, 100).ToList(); var j = 0; while (j < pc.Count) { Console.WriteLine(pc[j]); j++; } var pc=Enum

我正在尝试学习lambda表达式的使用,因此在阅读文档和其他各种相关文章之后,仍然难以实现。 所以,如果我想将下面的循环转换为lambda表达式,那么我将如何进行转换,我只需要一种方法来了解lambda表达式是如何工作的。
代码:

var pc = Enumerable.Range(2, 100).ToList();
var j = 0;
while (j < pc.Count)
{
    Console.WriteLine(pc[j]);
    j++;
}
var pc=Enumerable.Range(2100.ToList(); var j=0; 而(j试试看


但请注意,由于创建了其他对象,lambda通常速度较慢。不要在性能关键型应用程序中使用它们。

您不需要在内存中创建
可枚举范围的列表

var result = string.Join(Environment.NewLine, Enumerable.Range(2, total));
Console.Write(result);
逐步解释

  • 可枚举。范围使一个
    IEnumerable
    从长度为100的2开始。即,项目将为2、3、4…..101

  • .ToList()
    IEnumerable
    转换为
    List
    。为什么要转换?这样我们就可以使用
    ForEach
    方法
    List

  • 对您最重要的
    ForEach()
    。顾名思义,它对列表中的每个项目执行操作。在这里,列表的每个元素都被提取并放入一个运行时变量p中,该变量“转到”控制台。WriteLine(p)
  • 在控制台上写入


    您可以这样做:

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

    我知道这不是你问题的答案,但这是一个例子,我总是重新考虑LINQ是否真的是这个问题的最佳解决方案。我知道你只需要一个学习的例子,但请记住,对于一个拿着锤子的人来说,一切都像钉子

    foreach (var item in Enumerable.Range(2, 100))
    {
      Console.WriteLine(item);
    }
    
    这对我来说更容易理解,并且不会创建不必要的列表


    (希望我没有收到太多愤怒的评论…

    所以它们比我提供的代码显示慢?我刚刚实现了一个筛子,然后在编写之后,在codereview.stackexchange上看到了其他人的筛子,并学习了一些关于lambda表达式的知识,我认为实现它更好,因为代码变得相当简洁。。。所以我的假设是错误的吗?这个例子的优点是,不必创建列表,它直接使用枚举。
    Enumerable
    没有
    。ForEach
    方法,首先需要使用
    .ToList()
    。@Bali C-Upps你是对的,这里直接使用foreach循环的一个原因是,我不认为它会包含102个元素(2到102个元素就是101个元素)@V4Vendetta:Corrected。谢谢,但是它比我写的用来显示输出的普通循环快吗?在你的例子中,性能并不重要,因为它是一个简单的程序。但是当LINQ或传统循环中有更多的代码行时,传统循环比LINQ快。虽然这是一个很好的解决方案,但提问者希望使用lambda表达式。
    pc.ForEach(j => Console.WriteLine(j));
    
    Enumerable.Range(2, 100).ToList().ForEach(p => Console.WriteLine(p));
    
    Enumerable.Range(2, 100).ToList().ForEach(x => Console.WriteLine(x));
    
     Enumerable.Range(2, 100).ToList().ForEach(n => Console.WriteLine(n));
    
    foreach (var item in Enumerable.Range(2, 100))
    {
      Console.WriteLine(item);
    }