public static IHierarchyObject GetCommonAncestor(this IHierarchyObject source, IHierarchyObject other) { if (object.ReferenceEquals(other, source)) { return source; } else if (other.IsAncestorOf(source)) { return other; } else if (other.IsDescendentOf(source)) { return source; } else { // Scan the hierarchy foreach (IHierarchyObject ancestor in GetAncestors(other)) { // Check the ancestry - skip the starting instance; we already // performed that check if (ancestor.ParentObject != null && ancestor.ParentObject.IsAncestorOf(source)) { return ancestor.ParentObject; } } return null; } }
public static bool IsDescendentOf(this IHierarchyObject source, IHierarchyObject ancestor) { if (ancestor == null) { return false; } return ancestor.IsAncestorOf(source); }