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

| C#lambda表达式可以包含多个语句吗? (编辑:如以下几个答案中所述,该问题最初询问的是“行”而不是“语句”。)     
已邀请:
当然:
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;
            }
        );
    
您可以在lambda表达式中添加任意数量的换行符。 C#忽略换行符。 您可能打算询问多个语句。 可以将多个语句括在大括号中。 请参阅文档。     
(我假设您实际上是在谈论多个语句,而不是多行。) 您可以在带有括号的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; };
    
从C#7开始: 单行语句:
int expr(int x, int y) => x + y + 1; 
多行语句:
int expr(int x, int y) { int z = 8; return x + y + z + 1; };
尽管这些被称为局部函数,但我认为这看起来比以下的更为干净,并且实际上是相同的
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; };
    
Func<string, bool> test = (name) => 
{
   if (name == \"yes\") return true;
   else return false;
}
    
从Lambda表达式(C#编程指南)中:   lambda语句的主体可以   由任意数量的陈述组成;   但是实际上   通常不超过两个或三个。     
使用c#7.0 您也可以这样使用
Public string ParentMethod(int i, int x){
    int calculation = (i*x);
    (string info, int result) InternalTuppleMethod(param1, param2)
    {
        var sum = (calculation + 5);
        return (\"The calculation is\", sum);
    }
}
    
假设您有一堂课:
    public class Point
    {
        public int X { get; set; }
        public int Y { get; set; }
    }
在此类中使用C#7.0,即使没有大括号也可以做到:
Action<int, int> action = (x, y) => (_, _) = (X += x, Y += y);
Action<int, int> action = (x, y) => _ = (X += x, Y += y);
将与以下相同:
Action<int, int> action = (x, y) => { X += x; Y += y; };
如果您需要在一行中编写一个常规方法或构造函数,或者需要将一个以上的语句/表达式包装到一个表达式中,这也可能会有所帮助:
public void Action(int x, int y) => (_, _) = (X += x, Y += y);
要么
public void Action(int x, int y) => _ = (X += x, Y += y);
要么
public void Action(int x, int y) => (X, Y) = (X + x, Y + y);
有关文档中元组解构的更多信息。     

要回复问题请先登录注册