コード例 #1
0
        void InitParameters()
        {
            parameters = new List <IType>();
            foreach (var i in def.Parameters)
            {
                IType         type    = null;
                bool          isByRef = false;
                bool          isArray = false;
                TypeReference pt      = i.ParameterType;
                if (i.ParameterType.IsByReference)
                {
                    isByRef = true;
                    pt      = pt.GetElementType();
                }
                if (i.ParameterType.IsArray)
                {
                    isArray = true;
                    pt      = pt.GetElementType();
                }
                if (pt.IsGenericParameter)
                {
                    type = FindGenericArgument(pt.Name);
                    if (type == null && def.HasGenericParameters)
                    {
                        bool found = false;
                        foreach (var j in def.GenericParameters)
                        {
                            if (j.Name == pt.Name)
                            {
                                found = true;
                                break;
                            }
                        }
                        if (found)
                        {
                            type = new ILGenericParameterType(pt.Name);
                        }
                        else
                        {
                            throw new NotSupportedException("Cannot find Generic Parameter " + pt.Name + " in " + def.FullName);
                        }
                    }

                    if (isByRef)
                    {
                        type = type.MakeByRefType();
                    }
                    if (isArray)
                    {
                        type = type.MakeArrayType();
                    }
                }
                else
                {
                    type = appdomain.GetType(i.ParameterType, declaringType, this);
                }
                parameters.Add(type);
            }
        }
コード例 #2
0
 void InitParameters()
 {
     parameters = new List <IType>();
     foreach (var i in param)
     {
         IType type = appdomain.GetType(i.ParameterType.FullName);
         if (type == null)
         {
             type = appdomain.GetType(i.ParameterType.AssemblyQualifiedName);
         }
         if (i.ParameterType.IsGenericTypeDefinition)
         {
             if (type == null)
             {
                 type = appdomain.GetType(i.ParameterType.GetGenericTypeDefinition().FullName);
             }
             if (type == null)
             {
                 type = appdomain.GetType(i.ParameterType.GetGenericTypeDefinition().AssemblyQualifiedName);
             }
         }
         if (i.ParameterType.ContainsGenericParameters)
         {
             var t = i.ParameterType;
             if (t.HasElementType)
             {
                 t = i.ParameterType.GetElementType();
             }
             else if (t.GetGenericArguments().Length > 0)
             {
                 t = t.GetGenericArguments()[0];
             }
             type = new ILGenericParameterType(t.Name);
         }
         if (type == null)
         {
             throw new TypeLoadException();
         }
         parameters.Add(type);
     }
     if (def != null)
     {
         if (def.IsGenericMethod && !def.IsGenericMethodDefinition)
         {
             appdomain.RedirectMap.TryGetValue(def.GetGenericMethodDefinition(), out redirect);
         }
         else
         {
             appdomain.RedirectMap.TryGetValue(def, out redirect);
         }
     }
 }
コード例 #3
0
ファイル: CLRMethod.cs プロジェクト: ErQing/XIL
 void InitParameters()
 {
     parameters = new List <IType>();
     foreach (var i in ParametersCLR)
     {
         IType type = appdomain.GetType(i.ParameterType.FullName);
         if (type == null)
         {
             type = appdomain.GetType(i.ParameterType.AssemblyQualifiedName);
         }
         if (i.ParameterType.IsGenericTypeDefinition)
         {
             if (type == null)
             {
                 type = appdomain.GetType(i.ParameterType.GetGenericTypeDefinition().FullName);
             }
             if (type == null)
             {
                 type = appdomain.GetType(i.ParameterType.GetGenericTypeDefinition().AssemblyQualifiedName);
             }
         }
         if (i.ParameterType.ContainsGenericParameters)
         {
             var t = i.ParameterType;
             if (t.HasElementType)
             {
                 t = i.ParameterType.GetElementType();
             }
             else if (t.GetGenericArguments().Length > 0)
             {
                 t = t.GetGenericArguments()[0];
             }
             type = new ILGenericParameterType(t.Name);
         }
         if (type == null)
         {
             throw new TypeLoadException();
         }
         parameters.Add(type);
     }
 }
コード例 #4
0
        void InitParameters()
        {
            parameters = new List <IType>();
            foreach (var i in def.Parameters)
            {
                IType type = null;

                if (i.ParameterType.IsGenericParameter)
                {
                    type = FindGenericArgument(i.ParameterType.Name);
                    if (type == null && def.HasGenericParameters)
                    {
                        bool found = false;
                        foreach (var j in def.GenericParameters)
                        {
                            if (j.Name == i.ParameterType.Name)
                            {
                                found = true;
                                break;
                            }
                        }
                        if (found)
                        {
                            type = new ILGenericParameterType(i.ParameterType.Name);
                        }
                        else
                        {
                            throw new NotSupportedException("Cannot find Generic Parameter " + i.ParameterType.Name + " in " + def.FullName);
                        }
                    }
                }
                else
                {
                    type = appdomain.GetType(i.ParameterType, declaringType);
                }
                parameters.Add(type);
            }
        }