コード例 #1
0
ファイル: EnumHelper.cs プロジェクト: xxq860725/Ctrip.SOA
        public static ValuedEnumItemCollection GetValuedEnumItems(Type enumType)
        {
            ValuedEnumItemCollection enumItems = null;
            EnumTypeCacheItem        cacheItem = null;

            if (EnsureCacheFilled(enumType, out cacheItem))
            {
                enumItems = cacheItem.ValuedEnumItems;
            }

            return(enumItems);
        }
コード例 #2
0
ファイル: EnumHelper.cs プロジェクト: xxq860725/Ctrip.SOA
        internal static bool EnsureCacheFilled(Type enumType, out EnumTypeCacheItem cacheItem)
        {
            if (!EnumTypeCache.TryGetValue(enumType, out cacheItem))
            {
                lock (_syncObj)
                {
                    if (!EnumTypeCache.TryGetValue(enumType, out cacheItem))
                    {
                        if (enumType.IsEnum)
                        {
                            cacheItem = new EnumTypeCacheItem();
                            FieldInfo[] fields = enumType.GetFields();
                            foreach (FieldInfo field in fields)
                            {
                                if (field.FieldType.IsEnum)
                                {
                                    EnumItem enumItem = new EnumItem();
                                    enumItem.Name = field.Name;
                                    object enumItemObj = enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null);
                                    enumItem.Value  = (int)enumItemObj;
                                    enumItem.Object = enumItemObj;
                                    object[] itemAttributes = field.GetCustomAttributes(typeof(EnumItemAttribute), true);
                                    if (itemAttributes != null && itemAttributes.Length == 1)
                                    {
                                        EnumItemAttribute itemAttribute = itemAttributes[0] as EnumItemAttribute;
                                        if (itemAttribute != null)
                                        {
                                            enumItem.Key         = string.IsNullOrWhiteSpace(itemAttribute.Key) ? enumItem.Name : itemAttribute.Key;
                                            enumItem.Description = string.IsNullOrWhiteSpace(itemAttribute.Description) ? enumItem.Name : itemAttribute.Description;
                                            enumItem.IsDefault   = itemAttribute.IsDefault;
                                        }
                                    }
                                    else
                                    {
                                        enumItem.Key         = enumItem.Name;
                                        enumItem.Description = enumItem.Name;
                                    }

                                    cacheItem.Add(enumItem);
                                }
                            }

                            EnumTypeCache.Add(enumType, cacheItem);
                        }
                    }
                }
            }

            return(cacheItem != null);
        }
コード例 #3
0
 public static void Add(Type type, EnumTypeCacheItem cacheItem)
 {
     _enumTypeCache.Add(type, cacheItem);
 }
コード例 #4
0
 public static bool TryGetValue(Type type, out EnumTypeCacheItem cacheItem)
 {
     return(_enumTypeCache.TryGetValue(type, out cacheItem));
 }
コード例 #5
0
ファイル: EnumTypeCache.cs プロジェクト: deboe2015/Ctrip.SOA
 public static void Add(Type type, EnumTypeCacheItem cacheItem)
 {
     _enumTypeCache.Add(type, cacheItem);
 }
コード例 #6
0
ファイル: EnumTypeCache.cs プロジェクト: deboe2015/Ctrip.SOA
 public static bool TryGetValue(Type type, out EnumTypeCacheItem cacheItem)
 {
     return _enumTypeCache.TryGetValue(type, out cacheItem);
 }