【问题标题】:How can I compact this code with a Linq expression?如何使用 Linq 表达式压缩此代码?
【发布时间】:2022-10-15 05:07:35
【问题描述】:

我有这个代码来检查一个节点的所有后代节点是否被扩展。 如何使用 Linq 表达式压缩此代码?我了解代码的工作原理,但我无法在 Linq 中做同样的事情。

    public bool AllChildRowsExpanded()
    {
        if (!this.IsExpanded)
        {
            return false;
        }

        foreach (var row in this.ContainedRows)
        {
            if (row.ContainedRows == null || row.ContainedRows.Count == 0)
            {
                continue;
            }

            if (!row.AllChildRowsExpanded())
            {
                return false;
            }                    
        }
        return true;
    }

【问题讨论】:

  • 我只是好奇您希望使用 linq 实现什么样的紧凑结果?您能否澄清一下您期望得到什么样的结果?是单机吗?

标签: c# linq recursion


【解决方案1】:

您可以仅使用一种表达式主体方法将其进一步压缩。

public bool AllChildRowsExpanded()
    => IsExpanded && (ContainedRows == null || ContainedRows.All(r => r.AllChildRowsExpanded()));

【讨论】:

  • AllChildRowsAreExpanded -> AllChildRowsExpanded?另外,缺少;
  • 谢谢,我已经更正了代码
【解决方案2】:

我几乎不知道我们在这里操作什么样的情况,但沿着这些思路可能会奏效。

public bool AllChildRowsExpanded(){
    //Perhaps we also want to control that
    //we actually have children here aswell?
    if(!this.IsExpanded)
    {
        return false
    }
    if(this.ContainedRows == null || this.ContainedRows.Count == 0)
    {
        return true
    }

    return this.ContainedRows.Any(row => !AllChildRowsExpanded())
}

【讨论】:

  • 相信你最后的Any 测试不是你想要的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
相关资源
最近更新 更多