예제 #1
0
 /// <summary>
 /// 获取指定枚举类型的所有枚举字段信息。
 /// </summary>
 /// <param name="enumType">要获取其枚举字段信息的枚举。</param>
 /// <param name="ignoreDefaultDisplayName">指定是否忽略默认显示名称的枚举字段。</param>
 /// <returns>描述 <paramref name="enumType" /> 中所有枚举字段信息的 <see cref="T:YuLinTu.EnumField" /> 数组。</returns>
 /// <exception cref="T:System.ArgumentNullException"><paramref name="enumType" /> 为 <c>null</c>。</exception>
 /// <exception cref="T:System.ArgumentException"><paramref name="enumType" /> 参数不是 <see cref="T:System.Enum" />。</exception>
 public static EnumField[] GetFields(Type enumType, bool ignoreDefaultDisplayName = false)
 {
     if (null == enumType)
     {
         throw new ArgumentNullException("enumType");
     }
     if (!enumType.IsEnum)
     {
         throw new ArgumentException("提供的类型必须是 Enum。");
     }
     EnumField[] fieldsInternal = EnumField.GetFieldsInternal(enumType);
     if (ignoreDefaultDisplayName)
     {
         return((from f in fieldsInternal
                 where !f.IsDefaultDisplayName
                 select f).ToArray <EnumField>());
     }
     return(fieldsInternal);
 }
예제 #2
0
 private static EnumField[] GetFieldsInternal(Type enumType)
 {
     EnumField[] array = (EnumField[])EnumField.cachedHash[enumType];
     if (array == null)
     {
         if (EnumField.cachedHash.Count > 200)
         {
             EnumField.cachedHash.Clear();
         }
         FieldInfo[] fields = enumType.GetFields(BindingFlags.Static | BindingFlags.Public);
         array = new EnumField[fields.Length];
         for (int i = 0; i < fields.Length; i++)
         {
             FieldInfo enumFieldInfo = fields[i];
             array[i] = EnumField.GetEnumField(enumFieldInfo);
         }
         EnumField.cachedHash[enumType] = array;
     }
     return(array);
 }
예제 #3
0
        /// <summary>
        /// 获取枚举常数值的相关信息。
        /// </summary>
        /// <param name="enumValue">枚举常数值。</param>
        /// <returns>一个 <see cref="T:YuLinTu.EnumField" /> 的实例,它包含枚举常数值的一些信息。</returns>
        /// <exception cref="T:System.ArgumentNullException"><paramref name="enumValue" /> 为 <c>null</c>。</exception>
        /// <exception cref="T:System.ArgumentException"><paramref name="enumValue" /> 既不是枚举类型,也不是枚举基础类型,如 Int32。</exception>
        public static EnumField GetField(object enumValue)
        {
            if (enumValue == null)
            {
                throw new ArgumentNullException("enumValue");
            }
            Type type = enumValue.GetType();

            if (!type.IsEnum)
            {
                throw new ArgumentException("传入的值必须是枚举的枚举基或基础类型,如 Int32。");
            }
            EnumField[] fields = EnumField.GetFields(type, false);
            foreach (EnumField enumField in fields)
            {
                if (enumField.Value.Equals(enumValue))
                {
                    return(enumField);
                }
            }
            return(new EnumField(enumValue, enumValue.ToString(), string.Empty));
        }