/// <summary> /// 数组分配方法,数组类型会被拆分,例如:class[]或者int[] /// </summary> /// <param name="type"></param> public void ArrayRouter(Type type) { Type eleType = type.GetElementType(); BuilderInfo typeInfo = new BuilderInfo(); typeInfo.RealType = type; typeInfo.Type = eleType; typeInfo.TypeName = NameReverser.GetName(eleType); typeInfo.AvailableName = AvailableNameReverser.GetName(type); if (IsOnceType(eleType)) { //普通类型处理 ArrayOnceTypeHandler(typeInfo); } else { //复杂类型交由入口处理 EntityHandler(eleType); ArrayEntityHandler(typeInfo); } }
public static Func <T> NewDelegate <T>(Type type = null) { var builder = FastMethodOperator.New; if (type == null) { //直接使用T的类型作为初始化类型 type = typeof(T); } else { //T为object,那么自动加载type的命名空间 builder.Using(type); } //返回构建委托 return(builder .Using <T>() .MethodBody($@"return new {NameReverser.GetName(type)}();") .Return <T>() .Complie <Func <T> >()); }
public static string GetParameters(IEnumerable <KeyValuePair <Type, string> > list) { StringBuilder result = new StringBuilder(); result.Append('('); if (list != null) { int i = 0; foreach (var item in list) { if (i > 0) { result.Append(','); } result.Append(NameReverser.GetName(item.Key)); result.Append(' '); result.Append(item.Value); i += 1; } } result.Append(')'); return(result.ToString()); }
public T ClassName(Type type) { NameScript = NameReverser.GetName(type); return(Link); }
public T MethodName(Type type) { MethodNameScript = NameReverser.GetName(type); return(Link); }
/// <summary> /// 根据字段反射信息反解字段定义 /// </summary> /// <param name="reflectFieldInfo">字段反射信息</param> /// <returns></returns> public static string GetFieldDeclaration(FieldInfo reflectFieldInfo) { return(NameReverser.GetName(reflectFieldInfo.FieldType) + " " + reflectFieldInfo.Name); }
/// <summary> /// 实体分配方法,会遍历实体类中的所有成员,不包括方法 /// </summary> /// <param name="type"></param> public void EntityRouter(Type type) { BuilderInfo typeInfo = new BuilderInfo(); typeInfo.RealType = type; typeInfo.TypeName = NameReverser.GetName(type); typeInfo.AvailableName = AvailableNameReverser.GetName(type); EntityStartHandler(typeInfo); //字段克隆 var fields = type.GetFields(); for (int i = 0; i < fields.Length; i++) { var fieldInfo = fields[i]; //排除不能操作的类型 if (!fieldInfo.IsStatic && !fieldInfo.IsInitOnly) { Type fieldType = fieldInfo.FieldType; if (IsOnceType(fieldType)) //普通字段 { BuilderInfo info = new BuilderInfo(); info.MemberName = fieldInfo.Name; info.Type = fieldType; info.TypeName = NameReverser.GetName(fieldType); info.AvailableName = AvailableNameReverser.GetName(fieldType); FieldOnceTypeHandler(info); } else if (fieldType.IsArray) //数组 { Type eleType = fieldType.GetElementType(); BuilderInfo info = new BuilderInfo(); info.MemberName = fieldInfo.Name; info.RealType = eleType; info.Type = eleType; info.TypeName = NameReverser.GetName(eleType); info.AvailableName = AvailableNameReverser.GetName(fieldType); if (IsOnceType(eleType)) { FieldArrayOnceTypeHandler(info); } else { EntityHandler(eleType); FieldArrayEntityHandler(info); } } else if (!fieldType.IsNotPublic) { //检测集合 BuilderInfo info = new BuilderInfo(); info.MemberName = fieldInfo.Name; info.Type = fieldType; info.TypeName = NameReverser.GetName(fieldType); info.AvailableName = AvailableNameReverser.GetName(fieldType); EntityHandler(fieldType); if (fieldType.GetInterface("IEnumerable") != null) { if (fieldType.GetInterface("IDictionary") != null) { if (fieldType.IsInterface) { FieldIDictionaryHandler(info); } else { FieldDictionaryHandler(info); } } else { if (fieldType.IsInterface) { FieldICollectionHandler(info); } else { FieldCollectionHandler(info); } } } else { FieldEntityHandler(info); } } } } //属性克隆 var properties = type.GetProperties(); for (int i = 0; i < properties.Length; i++) { var propertyInfo = properties[i]; //排除不能操作的属性 if (propertyInfo.CanRead && !propertyInfo.GetGetMethod(true).IsStatic) { Type propertyType = propertyInfo.PropertyType; if (IsOnceType(propertyType)) //普通属性 { BuilderInfo info = new BuilderInfo(); info.MemberName = propertyInfo.Name; info.Type = propertyType; info.TypeName = NameReverser.GetName(propertyType); info.AvailableName = AvailableNameReverser.GetName(propertyType); PropertyOnceTypeHandler(info); } else if (propertyType.IsArray) //数组 { Type eleType = propertyType.GetElementType(); BuilderInfo info = new BuilderInfo(); info.MemberName = propertyInfo.Name; info.RealType = propertyType; info.Type = eleType; info.TypeName = NameReverser.GetName(eleType); info.AvailableName = AvailableNameReverser.GetName(propertyType); if (IsOnceType(eleType)) { PropertyArrayOnceTypeHandler(info); } else { EntityHandler(eleType); PropertyArrayEntityHandler(info); } } else if (!propertyType.IsNotPublic) { //检测集合 BuilderInfo info = new BuilderInfo(); info.MemberName = propertyInfo.Name; info.Type = propertyType; info.TypeName = NameReverser.GetName(propertyType); info.AvailableName = AvailableNameReverser.GetName(propertyType); EntityHandler(propertyType); if (propertyType.GetInterface("IEnumerable") != null) { if (propertyType.GetInterface("IDictionary") != null) { if (propertyType.IsInterface) { PropertyIDictionaryHandler(info); } else { PropertyDictionaryHandler(info); } } else { if (propertyType.IsInterface) { PropertyICollectionHandler(info); } else { PropertyCollectionHandler(info); } } } else { PropertyEntityHandler(info); } } } } EntityReturnHandler(typeInfo); }