/// <summary> /// 得到类型具体的Field信息 /// </summary> /// <param name="type"></param> /// <param name="fieldName"></param> /// <returns></returns> public static ExtendedFieldInfo GetTypeField(Type type, string fieldName) { (type != null).FalseThrow <ArgumentNullException>("type"); fieldName.CheckStringIsNullOrEmpty("fieldName"); TypeFields tf = GetTypeFields(type); ExtendedFieldInfo fi; TypeFieldInfo tfi = new TypeFieldInfo() { ObjectType = type, FieldName = fieldName }; tf.Fields.TryGetValue(tfi, out fi).FalseThrow("不能在类型{0}中找到字段{1}", type.FullName, fieldName); return(fi); }
private static void FillFieldsInfo(System.Type type, Dictionary <TypeFieldInfo, ExtendedFieldInfo> result) { FieldInfo[] fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public); foreach (FieldInfo fi in fields) { TypeFieldInfo tfi = new TypeFieldInfo(); tfi.FieldName = fi.Name; tfi.ObjectType = type; result.Add(tfi, new ExtendedFieldInfo(fi)); } if (type.BaseType != typeof(object)) { FillFieldsInfo(type.BaseType, result); } }