/// <summary> /// Compares two objects and returns a value indicating /// whether one is less than, equal to, or greater than the other. /// </summary> /// <param name="x">The first object to compare. /// </param> /// <param name="y">The second object to compare. /// </param> /// <returns> /// Value Condition Less than zero x is less than y. /// Zero x equals y. Greater than zero x is greater than y. /// </returns> /// <exception cref="T:System.ArgumentException"> /// Neither x nor y implements the /// <see cref="T:System.IComparable"/> interface. /// -or- x and y are of different types and neither one can /// handle comparisons with the other. </exception> public int Compare(object x, object y) { EnumMemberInfo first = (EnumMemberInfo)x; EnumMemberInfo second = (EnumMemberInfo)y; switch (_sortBy) { case SortBy.Name: return(first.Name.SafeCompare ( second.Name )); case SortBy.FriendlyName: return(first.DisplayName.SafeCompare ( second.DisplayName )); case SortBy.Value: return(first.Value - second.Value); } return(0); }
/// <summary> /// Parses the specified enum type. /// </summary> /// <param name="enumType">Type of the enum.</param> /// <returns></returns> public static EnumMemberInfo[] Parse(Type enumType) { // ArgumentUtility.NotNull ( enumType, "enumType" ); List <EnumMemberInfo> result = new List <EnumMemberInfo> (); if (!enumType.IsEnum) { throw new ArgumentException("enumType"); } Type underlyingType = Enum.GetUnderlyingType(enumType); switch (underlyingType.Name) { case "Byte": case "SByte": case "Int16": case "UInt16": case "Int32": case "UInt32": break; default: throw new ArgumentException("enumType"); } foreach (string name in Enum.GetNames(enumType)) { FieldInfo field = enumType.GetField ( name /*, BindingFlags.Public | BindingFlags.GetField */); DisplayNameAttribute titleAttribute = (DisplayNameAttribute)Attribute.GetCustomAttribute ( field, typeof(DisplayNameAttribute)); string dispayName = (titleAttribute == null) ? name : titleAttribute.DisplayName; int value = (int)Enum.Parse ( enumType, name); EnumMemberInfo info = new EnumMemberInfo ( name, dispayName, value); result.Add(info); } return(result.ToArray()); }
public static EnumMemberInfo[] Parse ( Type enumType ) { #if WINMOBILE || PocketPC throw new NotImplementedException(); #else // ArgumentUtility.NotNull ( enumType, "enumType" ); List <EnumMemberInfo> result = new List <EnumMemberInfo>(); if (!enumType.Bridge().IsEnum) { Log.Error ( "EnumMemberInfo::Parse: " + "type=" + enumType.FullName + " is not enum" ); throw new ArgumentException("enumType"); } Type underlyingType = Enum.GetUnderlyingType(enumType); switch (underlyingType.Name) { case "Byte": case "SByte": case "Int16": case "UInt16": case "Int32": case "UInt32": break; default: Log.Error ( "EnumMemberInfo::Parse: " + "unexpected underlying type=" + underlyingType.FullName ); throw new ArgumentException("enumType"); } foreach (string name in Enum.GetNames(enumType)) { FieldInfo field = enumType.GetField(name /*, BindingFlags.Public | BindingFlags.GetField */); #if CLASSIC || NETCORE || DROID DisplayNameAttribute titleAttribute = ReflectionUtility .GetCustomAttribute <DisplayNameAttribute>(field); string displayName = ReferenceEquals(titleAttribute, null) ? name : titleAttribute.DisplayName; #else string displayName = name; #endif int value = (int)Enum.Parse(enumType, name, false); EnumMemberInfo info = new EnumMemberInfo(name, displayName, value); result.Add(info); } return(result.ToArray()); #endif }