2

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

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

8 回答 8

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

一步一步的解释

  1. Enumerable.RangeIEnumarable<int>从 2 开始,长度为 100。即。项目将是 2,3,4.....101。

  2. .ToList()将其转换IEnumerableList. 为什么要转换?这样我们就可以ForEach使用List.

  3. 对你来说最重要ForEach()。顾名思义,它对列表中的每个项目执行操作。在这里,列表的每个元素都被取出并放入运行时变量 p 中,该变量“转到”=> Console.WriteLine(p)以在控制台上写入。

于 2012-07-02T09:03:42.017 回答
3

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

foreach (var item in Enumerable.Range(2, 100))
{
  Console.WriteLine(item);
}

这对我来说更容易理解,并且不会创建不必要的列表。

(希望我不会收到太多愤怒的评论......)

于 2012-07-02T09:29:48.207 回答
1

尝试

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

但请注意,由于创建了额外的对象,通常 lambdas 很慢。不要在性能关键的应用程序中使用它们。

于 2012-07-02T09:02:45.623 回答
0
pc.ForEach(f => Console.WriteLine(f));
于 2012-07-02T09:02:16.260 回答
0

您不需要创建Enumerable.Range.

var result = string.Join(Environment.NewLine, Enumerable.Range(2, total));
Console.Write(result);
于 2012-07-02T09:02:55.480 回答
0
pc.ForEach(j => Console.WriteLine(j));
于 2012-07-02T09:03:13.467 回答
0

你可以这样做:

Enumerable.Range(2, 100).ToList().ForEach(x => Console.WriteLine(x));
于 2012-07-02T09:03:51.620 回答
0
 Enumerable.Range(2, 100).ToList().ForEach(n => Console.WriteLine(n));
于 2012-07-02T09:04:18.977 回答