Пример #1
0
 internal static bool RefersToGenericParameterCLRSemantics(Type ReferringType, Type Typ)
 {
     if (ReferringType.IsByRef)
     {
         ReferringType = Symbols.GetElementType(ReferringType);
     }
     if (Symbols.IsGenericParameter(ReferringType))
     {
         if (ReferringType.DeclaringType == Typ)
         {
             return(true);
         }
     }
     else if (Symbols.IsGeneric(ReferringType))
     {
         Type[] typeArguments = Symbols.GetTypeArguments(ReferringType);
         int    index         = 0;
         while (index < typeArguments.Length)
         {
             if (Symbols.RefersToGenericParameterCLRSemantics(typeArguments[index], Typ))
             {
                 return(true);
             }
             checked { ++index; }
         }
     }
     else if (Symbols.IsArrayType(ReferringType))
     {
         return(Symbols.RefersToGenericParameterCLRSemantics(ReferringType.GetElementType(), Typ));
     }
     return(false);
 }
Пример #2
0
 internal static bool RefersToGenericParameter(Type ReferringType, MethodBase Method)
 {
     if (!Symbols.IsRawGeneric(Method))
     {
         return(false);
     }
     if (ReferringType.IsByRef)
     {
         ReferringType = Symbols.GetElementType(ReferringType);
     }
     if (Symbols.IsGenericParameter(ReferringType))
     {
         if (Symbols.AreGenericMethodDefsEqual(ReferringType.DeclaringMethod, Method))
         {
             return(true);
         }
     }
     else if (Symbols.IsGeneric(ReferringType))
     {
         Type[] typeArguments = Symbols.GetTypeArguments(ReferringType);
         int    index         = 0;
         while (index < typeArguments.Length)
         {
             if (Symbols.RefersToGenericParameter(typeArguments[index], Method))
             {
                 return(true);
             }
             checked { ++index; }
         }
     }
     else if (Symbols.IsArrayType(ReferringType))
     {
         return(Symbols.RefersToGenericParameter(ReferringType.GetElementType(), Method));
     }
     return(false);
 }