【问题标题】:Nested Lambda expression instead of foreach嵌套 Lambda 表达式而不是 foreach
【发布时间】:2018-09-05 22:04:06
【问题描述】:
class A{
    public B body { get; set; }
}

class B{
    public List<C> positions { get; set; }
}

class C{
    public string NameOfWeek { get; set; }
}

class week{
    public int ID { get; set; }
    public string NameOfWeek { get; set; }
}

class SomeX{
    public List<A> MapWeekID(List<week> weekList, List<A> AList)
        {
            foreach (var a in AList)
            {
                foreach (var position in a.body.positions)
                {
                    position.NameOfWeek = weekList
                        .Where(x => x.NameOfWeek.ToString() == position.NameOfWeek)
                        .Select(y => y.NameOfWeek)
                        .FirstOrDefault();
                }
            }

            return AList;
        }
}

这里是代码。 如何为上述 foreach 语句编写 lambda?我正在尝试但无法获得最佳解决方案,任何人都可以吗?

【问题讨论】:

  • Linq 在您想要修改 现有 集合时不是 非常好 (AList)。我建议保留foreach

标签: c# lambda foreach


【解决方案1】:

Linq扩展方法 不应该真正尝试解决所有问题。但是,如果您确实需要一个语句中的所有内容,则可以使用它。

AList.SelectMany(x => x.body.positions)
     .ToList()
     .ForEach(
         position => 
            position.NameOfWeek = weekList.Where(x => x.NameOfWeek == position.NameOfWeek)
                                          .Select(y => y.NameOfWeek)
                                          .FirstOrDefault());

注意 :如果这在我的办公桌上进行代码审查,请发回并附上说明,我的眼睛!!! ,请重构。

基本上,您的原始foreach 易于阅读和维护。它不是试图太花哨,你可以很容易地看到发生了什么。这些品质比把所有东西都放在一个陈述中更重要。

【讨论】:

  • 感谢您的积极评价 :)
【解决方案2】:

好吧,您可以使用 linq 函数 SelectMany。这是修改后的版本:

foreach(var position in AList.SelectMany(k => k.body.positions)) {
    position.NameOfWeek = weekList
                        .Where(x => x.NameOfWeek.ToString() == position.NameOfWeek)
                        .Select(y => y.NameOfWeek)
                        .FirstOrDefault();
}

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多