C#lambda表达式可以有多个语句吗?

pas*_*ena 120 c# lambda

C#lambda表达式可以包含多个语句吗?

(编辑:正如以下几个答案中所提到的,这个问题最初是关于"行"而不是"陈述".)

RQD*_*QDQ 180

当然:

List<String> items = new List<string>();

var results = items.Where(i => 
       {
                bool result;

                if (i == "THIS")
                    result = true;
                else if (i == "THAT")
                    result = true;
                else
                    result = false;

                return result;
            }
        );
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 27

您可以在lambda表达式中添加任意数量的换行符; C#忽略换行符.

你可能想问一下多个陈述.

多个语句可以用大括号括起来.

请参阅文档.

  • 说C#对待所有空格,包括换行符,是不是更准确?说它忽略换行线听起来有点误导 - 它看起来好像只是完全剥离它们,你可以在换行符或其他东西上拆分关键字. (15认同)

Jon*_*eet 26

(我假设你真的在谈论多个语句而不是多行.)

您可以使用大括号在lambda表达式中使用多个语句,但只有不使用大括号的语法才能转换为表达式树:

// Valid
Func<int, int> a = x => x + 1;
Func<int, int> b = x => { return x + 1; };        
Expression<Func<int, int>> c = x => x + 1;

// Invalid
Expression<Func<int, int>> d = x => { return x + 1; };
Run Code Online (Sandbox Code Playgroud)

  • @Habeeb:"无论如何,表达式将被视为Func"并非总是如此.很多时候它根本就没有编译成代理 - 只是作为数据进行检查..NET 4.0中的表达式树确实能够通过[Expression.Block]包含多个语句(https://docs.microsoft.com/en-gb/dotnet/api/system.linq.expressions.expression.block?view = netstandard-1.6)但C#*语言*不支持.它可以,但这需要更多的设计/实施/测试工作. (8认同)

Pol*_*ity 5

Func<string, bool> test = (name) => 
{
   if (name == "yes") return true;
   else return false;
}
Run Code Online (Sandbox Code Playgroud)

  • Func&lt;string, bool&gt; test = name =&gt; name=="yes"; (5认同)
  • 政体正在展示问题要求的多行格式,而不是娱乐高尔夫建议。实施您的明智代码将使其“不是答案”! (3认同)

Big*_*ief 5

从C#7开始:

单行语句:

int expr(int x, int y) => x + y + 1; 
Run Code Online (Sandbox Code Playgroud)

多行语句:

int expr(int x, int y) { int z = 8; return x + y + z + 1; };
Run Code Online (Sandbox Code Playgroud)

尽管这些被称为局部函数,但我认为这看起来比以下的更为干净,并且实际上是相同的

Func<int, int, int> a = (x, y) => x + y + 1;

Func<int, int, int> b = (x, y) => { int z = 8; return x + y + z + 1; };
Run Code Online (Sandbox Code Playgroud)