Esempio n. 1
0
        /// <summary>
        /// 检索指定枚举类型中常数文本和值的集合。
        /// </summary>
        /// <param name="enumType">枚举类型。</param>
        /// <param name="useDescription">是否读取枚举值的描述信息作为文本。</param>
        /// <returns>一个数组,其中包含 <paramref name="enumType"/> 中实例的文本和值。
        /// 该集合的元素按枚举阐述的二进制值排序。</returns>
        /// <exception cref="System.ArgumentException">
        /// <paramref name="enumType"/> 不是 <see cref="System.Enum"/>。</exception>
        public static TextValuePairCollection GetTextValues(Type enumType, bool useDescription)
        {
            TextValuePairCollection enumList = new TextValuePairCollection();
            // 这里使用自己的缓存。
            EnumCache cache = GetEnumCache(enumType);

            ulong[]  values = cache.Values;
            string[] names  = useDescription ? cache.Descriptions : cache.Names;
            for (int i = 0; i < values.Length; i++)
            {
                enumList.Add(names[i], Enum.ToObject(enumType, values[i]));
            }
            return(enumList);
        }
Esempio n. 2
0
        /// <summary>
        /// 检索指定枚举类型中常数文本和值的集合。
        /// </summary>
        /// <param name="useDescription">是否读取枚举值的描述信息作为文本。</param>
        /// <returns>一个 <see cref="TextValuePairCollection"/> 实例,其中包含
        /// <typeparamref name="TEnum"/> 中实例的文本和值。该集合的元素按枚举的二进制值排序。</returns>
        private static TextValuePairCollection <TEnum> GetTextValues <TEnum>(bool useDescription)
        {
            Contract.Requires(typeof(TEnum).IsEnum);
            Contract.Ensures(Contract.Result <TextValuePairCollection <TEnum> >() != null);
            TextValuePairCollection <TEnum> enumList = new TextValuePairCollection <TEnum>();
            EnumCache cache = GetEnumCache(typeof(TEnum));

            ulong[]  values = cache.Values;
            string[] names  = useDescription ? cache.Descriptions : cache.Names;
            Contract.Assume(names != null);
            Contract.Assume(names.Length == values.Length);
            Converter <ulong, TEnum> converter = Convert.GetConverter <ulong, TEnum>();

            for (int i = 0; i < values.Length; i++)
            {
                enumList.Add(names[i], converter(values[i]));
            }
            return(enumList);
        }
Esempio n. 3
0
        /// <summary>
        /// 检索指定枚举类型中常数文本和值的集合。
        /// </summary>
        /// <param name="enumType">枚举类型。</param>
        /// <param name="useDescription">是否读取枚举值的描述信息作为文本。</param>
        /// <returns>一个 <see cref="TextValuePairCollection"/> 实例,其中包含
        /// <paramref name="enumType"/> 中实例的文本和值。该集合的元素按枚举的二进制值排序。</returns>
        private static TextValuePairCollection GetTextValues(Type enumType, bool useDescription)
        {
            Contract.Requires(enumType != null && enumType.IsEnum);
            Contract.Ensures(Contract.Result <TextValuePairCollection>() != null);
            TextValuePairCollection list = new TextValuePairCollection();
            EnumCache cache = GetEnumCache(enumType);

            ulong[]  values = cache.Values;
            string[] names  = useDescription ? cache.Descriptions : cache.Names;
            Contract.Assume(names != null);
            Contract.Assume(names.Length == values.Length);
            Converter <object, object> converter = Convert.GetConverter(typeof(ulong), enumType);

            for (int i = 0; i < values.Length; i++)
            {
                list.Add(names[i], converter(values[i]));
            }
            return(list);
        }