如何使用LINQ表达式精简检查所有子行是否全部展开的代码?
用LINQ精简递归节点展开检查代码
你可以用LINQ的Where和All方法结合空值传播操作符,把原代码的循环逻辑精简成一行表达式,同时完全保留原有的判断逻辑:
public bool AllChildRowsExpanded() { return IsExpanded && (ContainedRows?.Where(row => row.ContainedRows?.Any() ?? false) .All(row => row.AllChildRowsExpanded()) ?? true); }
对应原代码的逻辑说明:
- 开头的
IsExpanded直接对应原代码中"当前节点未展开则返回false"的判断 ContainedRows?.Where(row => row.ContainedRows?.Any() ?? false):- 用
?.处理ContainedRows为null的情况,避免空引用异常 - 过滤出有子节点的行,对应原代码中跳过无子节点行的逻辑
- 用
.All(row => row.AllChildRowsExpanded()):检查所有符合条件的子节点都递归满足"全部子节点展开"的要求,只要有一个不满足就返回false,对应原代码循环中一旦发现不满足就返回false的逻辑?? true:当ContainedRows为null,或者没有需要检查的子节点时,直接返回true,对应原代码循环结束后返回true的情况
内容的提问来源于stack exchange,提问作者Jaime
相关产品推荐
相关产品推荐

