public static IEnumerable <Type> GetHierarchy(Type input, TypeHierarchyOrder typeHierarchyOrder = TypeHierarchyOrder.BottomUp) { // Traverse up the inheritence hierarchy but return // in top-down order if (input == null) { return(Enumerable.Empty <Type>()); } var types = new QueueOrStack <Type>(typeHierarchyOrder); AddTypeAndInterfaces(types, input); Type baseType = input; while ((baseType = baseType.BaseType) != null) { AddTypeAndInterfaces(types, baseType); } return(types.Distinct().ToList()); }
public QueueOrStack(TypeHierarchyOrder typeHierarchyOrder) { _typeHierarchyOrder = typeHierarchyOrder; }