Leer en inglés

Compartir a través de


Type.MakeGenericType(Type[]) Método

Definición

Sustituye los elementos de una matriz de tipos por los parámetros de tipo de la definición de tipo genérico actual y devuelve un objeto Type que representa el tipo construido resultante.

C#
public abstract Type MakeGenericType(params Type[] typeArguments);
C#
public virtual Type MakeGenericType(params Type[] typeArguments);

Parámetros

typeArguments
Type[]

Matriz de tipos que se va a sustituir por los parámetros del tipo genérico actual.

Devoluciones

Objeto Type que representa el tipo construido formado al sustituir los elementos de typeArguments por los parámetros del tipo genérico actual.

Excepciones

El tipo actual no representa una definición de un tipo genérico. Es decir, IsGenericTypeDefinition devuelve false.

typeArguments es null.

O bien

Cualquier elemento de typeArguments es null.

El número de elementos de typeArguments no es el mismo que el número de parámetros de tipo de la definición de tipo genérico actual.

O bien

Un elemento de typeArguments no satisface las restricciones especificadas para el parámetro de tipo correspondiente del tipo genérico actual.

O bien

typeArguments contiene un elemento que es un tipo de puntero (IsPointer devuelve true), un tipo por referencia (IsByRef devuelve true), o Void.

El método invocado no se admite en la clase base. Las clases derivadas deben proporcionar una implementación.

Ejemplos

En el ejemplo siguiente se usa el MakeGenericType método para crear un tipo construido a partir de la definición de tipo genérico para el Dictionary<TKey,TValue> tipo. El tipo construido representa un Dictionary<TKey,TValue> de Test objetos con claves de cadena.

C#
using System;
using System.Reflection;
using System.Collections.Generic;

public class Test
{
    public static void Main()
    {
        Console.WriteLine("\r\n--- Create a constructed type from the generic Dictionary type.");

        // Create a type object representing the generic Dictionary 
        // type, by omitting the type arguments (but keeping the 
        // comma that separates them, so the compiler can infer the
        // number of type parameters).      
        Type generic = typeof(Dictionary<,>);
        DisplayTypeInfo(generic);

        // Create an array of types to substitute for the type
        // parameters of Dictionary. The key is of type string, and
        // the type to be contained in the Dictionary is Test.
        Type[] typeArgs = { typeof(string), typeof(Test) };

        // Create a Type object representing the constructed generic
        // type.
        Type constructed = generic.MakeGenericType(typeArgs);
        DisplayTypeInfo(constructed);

        // Compare the type objects obtained above to type objects
        // obtained using typeof() and GetGenericTypeDefinition().
        Console.WriteLine("\r\n--- Compare types obtained by different methods:");

        Type t = typeof(Dictionary<String, Test>);
        Console.WriteLine("\tAre the constructed types equal? {0}", t == constructed);
        Console.WriteLine("\tAre the generic types equal? {0}", 
            t.GetGenericTypeDefinition() == generic);
    }

    private static void DisplayTypeInfo(Type t)
    {
        Console.WriteLine("\r\n{0}", t);

        Console.WriteLine("\tIs this a generic type definition? {0}", 
            t.IsGenericTypeDefinition);

        Console.WriteLine("\tIs it a generic type? {0}", 
            t.IsGenericType);

        Type[] typeArguments = t.GetGenericArguments();
        Console.WriteLine("\tList type arguments ({0}):", typeArguments.Length);
        foreach (Type tParam in typeArguments)
        {
            Console.WriteLine("\t\t{0}", tParam);
        }
    }
}

/* This example produces the following output:

--- Create a constructed type from the generic Dictionary type.

System.Collections.Generic.Dictionary`2[TKey,TValue]
        Is this a generic type definition? True
        Is it a generic type? True
        List type arguments (2):
                TKey
                TValue

System.Collections.Generic.Dictionary`2[System.String, Test]
        Is this a generic type definition? False
        Is it a generic type? True
        List type arguments (2):
                System.String
                Test

--- Compare types obtained by different methods:
        Are the constructed types equal? True
        Are the generic types equal? True
 */

Comentarios

Para obtener más información sobre esta API, consulte Comentarios complementarios de la API para Type.MakeGenericType.

Se aplica a

Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Consulte también