【问题标题】:statements and return within a lambda expression lambda语句并在 lambda 表达式中返回 lambda
【发布时间】:2019-09-19 10:18:44
【问题描述】:

在 C# 中,我试图通过验证乘客付款来验证满载乘客的巴士是否准备好出发:

bool busReadyToGo = true;
passengers.Any(p => p.paymentStatus == PaymentRegistryEnum.NotPaid ?  busReadyToGo = false; return busReadyToGo; : continue; );

所以这应该检查所有乘客的付款状态,如果遇到尚未付款的one 乘客,则它会停在那里并返回 busReadytoGo = false。否则它将继续迭代/过滤乘客,这意味着如果乘客没有付款,它将稍后返回 true。

不确定这是否是在 Linq/lambda 表达式中执行此操作的正确方法,因为我不断收到语法错误。

【问题讨论】:

    标签: c# linq if-statement lambda conditional-statements


    【解决方案1】:

    .Any 方法已经返回一个布尔值。无需在表达式中包含 if 语句。 这应该没问题:

    bool busReadyToGo = !passengers.Any(p => p.paymentStatus == PaymentRegistryEnum.NotPaid)
    

    【讨论】:

      【解决方案2】:

      Any 在遇到 lambda 表达式中第一个返回 true 的元素时已经停止枚举。你只需要从 Any 得到结果

      busReadyToGo = !passengers.Any(p => p.paymentStatus == PaymentRegistryEnum.NotPaid);
      

      如果您查看Remarks section in docs,您可以阅读

      只要有结果就停止源的枚举 确定。

      【讨论】:

      • 它返回什么?一个布尔?我需要处理 null 吗?
      • 是的,它返回一个布尔值,不,这里没有空处理
      • 即使我传递了一个空列表?
      • 是的,如果你使用一个空列表,那么结果将是错误的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多