【问题标题】:Can LINQ ForEach have if statement?LINQ ForEach 可以有 if 语句吗?
【发布时间】:2013-07-01 22:23:00
【问题描述】:

是否可以在 LINQ ForEach 调用中添加if-statement?

sequence.Where(x => x.Name.ToString().Equals("Apple"))
        .ToList()
        .ForEach( /* If statement here */ );

【问题讨论】:

  • 问题不清楚
  • 没有 LINQ ForEach 方法。那是List的方法。
  • 您想在if 中添加什么不能用作Where 中的谓词?

标签: c# linq list if-statement foreach


【解决方案1】:

旧线程,但我认为语法更简洁

foreach(var item in sequence.Where(s => s.Name.ToString() == "Apple"))
{
 // do whatever
}

【讨论】:

  • 没错,为了简单起见,应该使用 Linq 与传统的 foreach,即应该使用看起来更干净、更容易理解的任何东西。
  • 如果带有 lambda 的 Linq 可以将长 foreach 缩小到单行,则可以使用它。但如果 Linq 变得太不可读,那么可以使用传统的 foreach 来获得更好的可读性。
【解决方案2】:

是的,在 ForEach 中常用的 if 语句如下:

sequence.Where(x => x.Name.ToString().Equals("Apple"))
    .ToList()
    .ForEach( x =>
     {
       if(someCondition)
       {
         // Do some stuff here.
       }  
     });

【讨论】:

    【解决方案3】:

    您可以执行以下操作...

    List.Where(x => x.Name.ToString().Equals("Apple").ToList()
        .ForEach( x => { if(x.Name == ""){}} );
    

    【讨论】:

      【解决方案4】:

      是的,它需要一个 lambda 表达式,因此您可以在其中放入任何有效的 c# 表达式

      【讨论】:

      • 我不会说 any...有些构造是表达式 API 无法表示的。
      • 哦,等一下,对不起,我的评论不适用于这里。我们在这里创建一个委托,而不是一个表达式。 IIRC,相同的限制不会影响委托,可以使用任何构造。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 1970-01-01
      • 2020-11-09
      • 2018-07-31
      • 1970-01-01
      • 2018-02-06
      • 2017-12-03
      相关资源
      最近更新 更多