c# - 如何将此递归代码转换为 Linq

标签 c# linq

谁能告诉我如何以最佳方式将以下代码转换为 LINQ:

static int MyMethod(MyClass my, bool b)
{
  int cnt = 0;

  foreach(SomeClass cls in my.SomeMethod()
  {
    cnt = cnt + cls.length;
  }

  if(b == true)
  {
    foreach(MyClass aa in my.SomeOtherMethod())
    {
      cnt = cnt + MyMethod(aa, true); // recursive
    }
  }

  return cnt;
}

请注意,我知道上面的代码工作正常,但我需要在 LINQ 中编写它并进行比较。

最佳答案

正如 Darin 所说,如果不明确这样做,您就无法轻松递归 - 但您仍然可以使用 LINQ 简化此代码:

static int MyMethod(MyClass my, bool b)
{
  int cnt = my.SomeMethod().Sum(cls => cls.length);    
  if (b)
  {
      cnt += my.SomeOtherMethod().Sum(aa => MyMethod(aa, true));
  }    
  return cnt;
}

关于c# - 如何将此递归代码转换为 Linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3123014/

相关文章:

c# - "btn.Click += new RoutedEventHandler (ButtonClick)"和 "btn.Click += ButtonClick"有什么区别?

linq - 为什么第一次引用 Linq to Entities 时速度如此之慢

c# - 数据库表的 Entity Framework 和本地缓存

c# - 为什么添加不必要的 ToList() 会大大加快此 LINQ 查询的速度?

c# - 使用 Linq 从 xml 文件读取到对象列表

c# - 使用 LINQ 和 lambda 将字符串置于正确的大小写形式

c# - 使用 Asp.Net WebApi + EF + Odata 深度插入数据

c# - 向 WPF DataGrid 添加按钮

c# - 如何验证电子邮件来自ASP.NET MVC中的特定域?

c# - 如何找到给定时间跨度的所有数据