GetGenericArgumentsFor() public méthode

public GetGenericArgumentsFor ( MethodInfo genericMethod ) : System.Type[]
genericMethod System.Reflection.MethodInfo
Résultat System.Type[]
Exemple #1
0
        public static Type GetClosedParameterType(this AbstractTypeEmitter type, Type parameter)
        {
            if (parameter.IsGenericTypeDefinition)
            {
                return(parameter.GetGenericTypeDefinition().MakeGenericType(type.GetGenericArgumentsFor(parameter)));
            }

            if (parameter.IsGenericType)
            {
                var arguments = parameter.GetGenericArguments();
                if (CloseGenericParametersIfAny(type, arguments))
                {
                    return(parameter.GetGenericTypeDefinition().MakeGenericType(arguments));
                }
            }

            if (parameter.IsGenericParameter)
            {
                return(type.GetGenericArgument(parameter.Name));
            }

            if (parameter.IsArray)
            {
                var elementType = GetClosedParameterType(type, parameter.GetElementType());
                return(elementType.MakeArrayType());
            }

            if (parameter.IsByRef)
            {
                var elementType = GetClosedParameterType(type, parameter.GetElementType());
                return(elementType.MakeByRefType());
            }

            return(parameter);
        }
Exemple #2
0
		public static Type GetClosedParameterType(AbstractTypeEmitter type, Type parameter)
		{
			if (parameter.IsGenericTypeDefinition)
			{
				return parameter.GetGenericTypeDefinition().MakeGenericType(type.GetGenericArgumentsFor(parameter));
			}

			if (parameter.IsGenericType)
			{
				Type[] arguments = parameter.GetGenericArguments();
				if (CloseGenericParametersIfAny(type, arguments))
				{
					return parameter.GetGenericTypeDefinition().MakeGenericType(arguments);
				}
			}
			
			if (parameter.IsGenericParameter)
			{
				return type.GetGenericArgument(parameter.Name);
			}

			if (parameter.IsArray)
			{
				var elementType = GetClosedParameterType(type, parameter.GetElementType());
				return elementType.MakeArrayType();
			}
			
			if(parameter.IsByRef)
			{
				var elementType = GetClosedParameterType(type, parameter.GetElementType());
				return elementType.MakeByRefType();
			}

			return parameter;
		}