/// <summary>対象ノードからレベル順に、条件に一致したノードを全て削除する。</summary> public static T RemoveDescendant <T>(this ITreeNode <T> self, Predicate <T> predicate) where T : ITreeNode <T> { if (predicate == null) { throw new ArgumentNullException("predicate"); } self.Evolve(x => x.RemoveChild(predicate).Children, (x, y) => x.Concat(y)); return((T)self); }