/// <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"); }
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)); }
/// <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); }
/// <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()); }