Exemplo n.º 1
0
            /// <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);
            }
Exemplo n.º 2
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());
        }
Exemplo n.º 3
0
        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
        }