public static IEnumerable <AbstractNode> GetChildNodesOfObject(Expression targetObject, DebugType shownType)
        {
            BindingFlags Flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.Field | BindingFlags.GetProperty;

            if (shownType.BaseType != null)
            {
                yield return(new BaseClassNode(targetObject, shownType.BaseType));
            }
            if (shownType.HasMembers(NonPublicInstanceMembersNode.Flags))
            {
                yield return(new NonPublicInstanceMembersNode(targetObject, shownType));
            }
            if (shownType.HasMembers(StaticMembersNode.Flags) ||
                shownType.HasMembers(NonPublicStaticMembersNode.Flags))
            {
                yield return(new StaticMembersNode(targetObject, shownType));
            }
            DebugType iListType = shownType.GetInterface(typeof(IList).FullName);

            if (iListType != null)
            {
                yield return(new IListNode(targetObject, iListType));
            }
            foreach (Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags))
            {
                yield return(ValueNode.Create(childExpr));
            }
        }
 IEnumerable <AbstractNode> GetChildNodes()
 {
     if (shownType.HasMembers(NonPublicStaticMembersNode.Flags))
     {
         yield return(new NonPublicStaticMembersNode(targetObject, shownType));
     }
     foreach (Expression childExpr in targetObject.AppendObjectMembers(shownType, Flags))
     {
         yield return(ValueNode.Create(childExpr));
     }
 }