コード例 #1
0
ファイル: SirenMachine.cs プロジェクト: ylyking/Medusa
        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);
        }
コード例 #2
0
ファイル: SirenMachine.cs プロジェクト: ylyking/Medusa
        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);
        }