Exemplo n.º 1
0
        /// <summary>
        /// Convert a string representation into an enum constant.
        /// </summary>
        public static object Parse(Type enumType, string name, bool ignoreCase)
        {
            if (enumType == null)
            {
                throw new ArgumentNullException("enumType");
            }
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }

            if (typeof(Dot42.Internal.Enum).JavaIsAssignableFrom(enumType))
            {
                var info = EnumInfo.GetEnumInfo(enumType);
                return(info.Parse(name, ignoreCase, true));
            }

            // fallback
            var fields = enumType.JavaGetDeclaredFields();

            foreach (var field in fields)
            {
                if (!IsEnumMember(field))
                {
                    continue;
                }
                if ((!ignoreCase && field.Name == name) || (ignoreCase && field.Name.EqualsIgnoreCase(name)))
                {
                    return(field.Get(null));
                }
            }
            throw new ArgumentException("name");
        }
Exemplo n.º 2
0
        public static Type GetUnderlyingType(Type enumType)
        {
            if (!enumType.IsEnum)
            {
                throw new ArgumentException("enumType");
            }

            if (typeof(Dot42.Internal.Enum).JavaIsAssignableFrom(enumType))
            {
                var info = EnumInfo.GetEnumInfo(enumType);
                return(info.Underlying);
            }

            return(typeof(int));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Try to convert a string representation into an enum constant.
        /// </summary>
        public static bool TryParse <TEnum>(string name, bool ignoreCase, out TEnum result)
            where TEnum : struct
        {
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }

            var enumType = typeof(TEnum);

            if (typeof(Dot42.Internal.Enum).JavaIsAssignableFrom(enumType))
            {
                var info = EnumInfo.GetEnumInfo(enumType);
                var ret  = info.Parse(name, ignoreCase, false);
                if (ret != null)
                {
                    result = (TEnum)(object)ret;
                    return(true);
                }
                result = (TEnum)(object)info.DefaultValue();
                return(false);
            }

            // fallback.
            var fields = enumType.JavaGetDeclaredFields();

            foreach (var field in fields)
            {
                if (!IsEnumMember(field))
                {
                    continue;
                }
                {
                    if ((!ignoreCase && field.Name == name) ||
                        (ignoreCase && field.Name.EqualsIgnoreCase(name)))
                    {
                        result = (TEnum)field.Get(null);
                        return(true);
                    }
                }
            }
            result = default(TEnum);
            return(false);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Get the values of the constants in the given enum.
        /// </summary>
        public static Array GetValues(Type enumType)
        {
            if (typeof(Dot42.Internal.Enum).JavaIsAssignableFrom(enumType))
            {
                var info = EnumInfo.GetEnumInfo(enumType);
                return(info.Values());
            }

            // Fallback for java enums (do we need this?)
            var fields = enumType.JavaGetDeclaredFields();
            var values = new ArrayList <object>();

            foreach (var field in fields)
            {
                if (!IsEnumMember(field))
                {
                    continue;
                }
                values.Add(field.Get(null));
            }

            return(values.OrderBy(p => p).ToArray());
        }