【问题标题】:How can I combine multiple statement in lambda expression如何在 lambda 表达式中组合多个语句
【发布时间】:2012-01-07 17:24:03
【问题描述】:

我是这个 LINQ 领域的新手,我正在尝试做一件事。

我有一个动作委托(写在下面),我想将其转换为 lambda 表达式。

      Action<string> custom = delegate(string name)
            {
                lstCutomers.Add(new Customer(name, coutries[cnt]));
                name = name + " Object Created";
            };

相同的 lambda 表达式是什么。我只想知道如果没有,我可以在 lambda 中编写多个语句,那么为什么?

提前致谢。

【问题讨论】:

  • 是的,您可以编写单个语句或语句块
  • 查看:stackoverflow.com/questions/299703/…,详细讨论委托表示法与 Lambda 表示法。
  • 您意识到将值分配回name 不会产生任何影响,对吧?所以你的第二个语句是无关紧要的,你可以使用非语句 lambda。要么你给出了一个不好的例子,要么你的代码中可能有一个错误......

标签: c# lambda


【解决方案1】:

你不能创建一个 lambda 表达式,因为你没有返回任何东西。但是,您可以创建一个 statement lambda:

Action<string> custom = (name) =>
        {
            lstCutomers.Add(new Customer(name, coutries[cnt]));
            name = name + " Object Created";
        };

【讨论】:

  • 那将是匿名方法。它应该类似于 Action customLambda = (name) => lstCutomers.Add(new Customer(name, coutries[cnt]);name = name + " Object Created"; );甚至没有编译。
  • 那么不确定,因为Expression 总是以一个值结束。我以为=&gt; 使它成为一个 lambda 表达式(由于自定义类型,它被转换为匿名方法)。
  • @DJ:来自MSDN A lambda expression is an anonymous function that can contain expressions and statements 也可以参见语句 Lambda 部分。已更新我的答案。
  • @GeorgeDuckett:我正在回答 OP 的问题,即在哪里可以使用带有多个语句的 lambda 表达式。此外,不返回任何内容与成为语句 lambda 是正交的:您可以使用返回值的语句 lambda,以及不返回值的非语句 lambda。
  • @GeorgeDuckett:请注意,在您的第一条评论中,您说的是Expression,它仅在将 lambda 表达式转换为表达式树时使用。这在这里无关紧要。语句 lambda 和非语句 lambda 都是 lambda 表达式。 (规范实际上并没有使用术语“语句 lambda”——它讨论了带有一个主体的 lambda 表达式,该主体是表达式或语句主体。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 2019-09-19
  • 2017-04-14
  • 2011-08-04
相关资源
最近更新 更多