using System; using System.Collections.Generic; using System.Linq; using System.Text; using CommonLang.Property; using CommonLang; namespace CommonLang.Property { public class Catgorys { private List triggerTypes; private HashMap> catgorysMap = new HashMap>(); private List catgorysName = new List(); public Catgorys(Type baseType) { BaseType = baseType; triggerTypes = ReflectionUtil.GetNoneVirtualSubTypes(baseType); foreach (Type type in triggerTypes) { try { TypeDescAttribute tt = new TypeDescAttribute(type); List catgorys = catgorysMap.Get(tt.Desc.Category); if (catgorys == null) { catgorys = new List(); catgorysName.Add(tt.Desc.Category); catgorysMap.Put(tt.Desc.Category, catgorys); } catgorys.Add(tt); } catch (Exception err) { Console.WriteLine("Catgorys catch: " + err); } } } public Type BaseType { get; private set; } public List CatgoryNames { get { return catgorysName; } } public List GetCatgoryTypes(string name) { return catgorysMap.Get(name); } /// /// 找到Type对应的TypeDescAttribute /// /// /// public TypeDescAttribute GetTypeDescAttribute(Type type) { DescAttribute desc = PropertyUtil.GetAttribute(type); if (desc != null) { List catgorys = catgorysMap.Get(desc.Category); if (catgorys != null) { foreach (TypeDescAttribute ta in catgorys) { if (ta.DataType == type) { return ta; } } } } return null; } private static HashMap CatgorysMap = new HashMap(); public static Catgorys GetCatgory(Type baseType) { Catgorys ret = CatgorysMap.Get(baseType); if (ret == null) { ret = new Catgorys(baseType); CatgorysMap.Put(baseType, ret); } return ret; } } }