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