public static SirenCustomClass FindClass(Type type) { if (type.IsPrimitive || type == typeof(string) || type == typeof(byte[])) { return(null); } SirenCustomClass sirenClass; if (AllSirenClasses.TryGetValue(type, out sirenClass)) { return(sirenClass); } if (GenerictSirenClasses.TryGetValue(type, out sirenClass)) { return(sirenClass); } if (type.IsGenericType) { Type testType = null; foreach (var temp in AllSirenClasses) { var oldType = temp.Key; if (oldType.IsGenericTypeDefinition) { testType = oldType.MakeGenericType(type.GetGenericArguments()); if (testType == type) { var attr2 = type.GetCustomAttributes(typeof(SirenClassAttribute), false); if (attr2.Length <= 0) { return(null); } sirenClass = new SirenCustomClass(type, attr2[0] as SirenClassAttribute); sirenClass.Initialize(); break; } testType = null; } } if (testType != null) { GenerictSirenClasses.Add(testType, sirenClass); } } return(sirenClass); }
public static SirenType FindType(Type type) { if (type.IsGenericType) { if (type.Name.StartsWith("List")) { return(new SirenBuildinList(type)); } if (type.Name.StartsWith("Dictionary")) { return(new SirenBuildinDictionary(type)); } } else { if (type.IsValueType) { if (type == typeof(bool)) { return(Bool); } if (type == typeof(char)) { return(Int8); } if (type == typeof(short)) { return(Int16); } if (type == typeof(int)) { return(Int32); } if (type == typeof(Int64)) { return(Int64); } if (type == typeof(byte)) { return(UInt8); } if (type == typeof(ushort)) { return(UInt16); } if (type == typeof(uint)) { return(UInt32); } if (type == typeof(UInt64)) { return(UInt64); } if (type == typeof(float)) { return(Float); } if (type == typeof(double)) { return(Double); } } else { if (type == typeof(string)) { return(String); } if (type == typeof(byte[])) { return(Blob); } } } SirenCustomClass sirenClass; if (AllSirenClasses.TryGetValue(type, out sirenClass)) { return(sirenClass); } if (GenerictSirenClasses.TryGetValue(type, out sirenClass)) { return(sirenClass); } SirenCustomEnum sirenEnum; if (AllSirenEnums.TryGetValue(type, out sirenEnum)) { return(sirenEnum); } if (type.IsGenericType) { Type testType = null; foreach (var temp in AllSirenClasses) { var oldType = temp.Key; if (oldType.IsGenericTypeDefinition) { testType = oldType.MakeGenericType(type.GetGenericArguments()); if (testType == type) { var attr2 = type.GetCustomAttributes(typeof(SirenClassAttribute), false); if (attr2.Length <= 0) { return(null); } sirenClass = new SirenCustomClass(type, attr2[0] as SirenClassAttribute); sirenClass.Initialize(); break; } testType = null; } } if (testType != null) { GenerictSirenClasses.Add(testType, sirenClass); } } return(sirenClass); }