CSLE.RegHelper_Type.MakeType C# (CSharp) Метод

MakeType() публичный статический Метод

public static MakeType ( Type type, string keyword ) : RegHelper_Type
type System.Type
keyword string
Результат RegHelper_Type
        public static RegHelper_Type MakeType(Type type, string keyword)
        {
            if (!type.IsSubclassOf(typeof(Delegate)))
            {
                return new RegHelper_Type(type, keyword, false);
            }
            var method = type.GetMethod("Invoke");
            var pp = method.GetParameters();
            if (method.ReturnType == typeof(void))
            {
                if (pp.Length == 0)
                {
                    return new RegHelper_DeleAction(type, keyword);
                }
                else if (pp.Length == 1)
                {
                    var gtype = typeof(RegHelper_DeleAction<>).MakeGenericType(new Type[] { pp[0].ParameterType });
                    return gtype.GetConstructors()[0].Invoke(new object[] { type, keyword }) as RegHelper_Type;
                }
                else if (pp.Length == 2)
                {
                    var gtype = typeof(RegHelper_DeleAction<,>).MakeGenericType(new Type[] { pp[0].ParameterType, pp[1].ParameterType });
                    return (gtype.GetConstructors()[0].Invoke(new object[] { type, keyword }) as RegHelper_Type);
                }
                else if (pp.Length == 3)
                {
                    var gtype = typeof(RegHelper_DeleAction<,,>).MakeGenericType(new Type[] { pp[0].ParameterType, pp[1].ParameterType, pp[2].ParameterType });
                    return (gtype.GetConstructors()[0].Invoke(new object[] { type, keyword }) as RegHelper_Type);
                }
                else
                {
                    throw new Exception("还没有支持这么多参数的委托");
                }
            }
            else
            {
                Type gtype = null;
                if (pp.Length == 0)
                {
                    gtype = typeof(RegHelper_DeleNonVoidAction<>).MakeGenericType(new Type[] { method.ReturnType });
                }
                else if (pp.Length == 1)
                {
                    gtype = typeof(RegHelper_DeleNonVoidAction<,>).MakeGenericType(new Type[] { method.ReturnType, pp[0].ParameterType });
                }
                else if (pp.Length == 2)
                {
                    gtype = typeof(RegHelper_DeleNonVoidAction<,,>).MakeGenericType(new Type[] { method.ReturnType, pp[0].ParameterType, pp[1].ParameterType });
                }
                else if (pp.Length == 3)
                {
                    gtype = typeof(RegHelper_DeleNonVoidAction<,,,>).MakeGenericType(new Type[] { method.ReturnType, pp[0].ParameterType, pp[1].ParameterType, pp[2].ParameterType });
                }
                else
                {
                    throw new Exception("还没有支持这么多参数的委托");
                }
                return (gtype.GetConstructors()[0].Invoke(new object[] { type, keyword }) as RegHelper_Type);

            }


        }
        [Obsolete("use MakeType Instead.")]

Usage Example

Пример #1
0
        public ICLS_Type GetType(CLType type)
        {
            if (type == null)
            {
                return(typess["null"]);
            }

            ICLS_Type ret = null;

            if (types.TryGetValue(type, out ret) == false)
            {
                logger.Log_Warn("(CLScript)类型未注册,将自动注册一份匿名:" + type.ToString());
                ret = RegHelper_Type.MakeType(type, "");
                RegType(ret);
            }
            return(ret);
        }
All Usage Examples Of CSLE.RegHelper_Type::MakeType