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> 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,y) => _ = (X += x,Y += y);
将与以下相同:
Action<int,y) => { X += x; Y += y; };
如果您需要在一行中编写一个常规方法或构造函数,或者需要将一个以上的语句/表达式包装到一个表达式中,这也可能会有所帮助:
public void Action(int x,int y) => (_,Y += y);
要么
public void Action(int x,int y) => _ = (X += x,int y) => (X,Y) = (X + x,Y + y);
有关文档中元组解构的更多信息。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...