///Gets an array of MenuItemInfo out of the GenericMenu provided
        public static MenuItemInfo[] GetMenuItems(GenericMenu menu)
        {
            var itemField = typeof(GenericMenu).GetField("menuItems", BindingFlags.Instance | BindingFlags.NonPublic);
            var items     = itemField.GetValue(menu) as ArrayList;

            if (items.Count == 0)
            {
                return(new MenuItemInfo[0]);
            }

            var itemType       = items[0].GetType();
            var contentGetter  = ReflectionTools.GetFieldGetter <object, GUIContent>(itemType.GetField("content"));
            var sepGetter      = ReflectionTools.GetFieldGetter <object, bool>(itemType.GetField("separator"));
            var selectedGetter = ReflectionTools.GetFieldGetter <object, bool>(itemType.GetField("on"));
            var func1Getter    = ReflectionTools.GetFieldGetter <object, GenericMenu.MenuFunction>(itemType.GetField("func"));
            var func2Getter    = ReflectionTools.GetFieldGetter <object, GenericMenu.MenuFunction2>(itemType.GetField("func2"));
            var dataGetter     = ReflectionTools.GetFieldGetter <object, object>(itemType.GetField("userData"));

            var result = new List <MenuItemInfo>();

            foreach (var item in items)
            {
                var content   = contentGetter(item);
                var separator = sepGetter(item);
                var selected  = selectedGetter(item);
                var func1     = func1Getter(item);
                var func2     = func2Getter(item);
                var userData  = dataGetter(item);
                result.Add(new MenuItemInfo(content, separator, selected, func1, func2, userData));
            }

            return(result.ToArray());
        }