public static ValuedEnumItemCollection GetValuedEnumItems(Type enumType) { ValuedEnumItemCollection enumItems = null; EnumTypeCacheItem cacheItem = null; if (EnsureCacheFilled(enumType, out cacheItem)) { enumItems = cacheItem.ValuedEnumItems; } return(enumItems); }
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); }
public static void Add(Type type, EnumTypeCacheItem cacheItem) { _enumTypeCache.Add(type, cacheItem); }
public static bool TryGetValue(Type type, out EnumTypeCacheItem cacheItem) { return(_enumTypeCache.TryGetValue(type, out cacheItem)); }
public static bool TryGetValue(Type type, out EnumTypeCacheItem cacheItem) { return _enumTypeCache.TryGetValue(type, out cacheItem); }