Ler em inglês

Compartilhar via


Type.MakeGenericType(Type[]) Método

Definição

Substitui os elementos de uma matriz de tipos pelos parâmetros de tipo da definição de tipo genérico atual e retorna um objeto Type que representa o tipo construído resultante.

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

Parâmetros

typeArguments
Type[]

Uma matriz de tipos a serem substituídos pelos parâmetros de tipo do tipo genérico atual.

Retornos

Um Type representando o tipo construído formado substituindo os elementos do typeArguments pelos parâmetros de tipo do tipo genérico atual.

Exceções

O tipo atual não representa uma definição de tipo genérica. Ou seja, IsGenericTypeDefinition retorna false.

typeArguments é null.

- ou -

Qualquer elemento de typeArguments é null.

O número de elementos em typeArguments não é igual ao número de parâmetros de tipo na definição de tipo genérico atual.

- ou -

Nenhum elemento do typeArguments satisfaz as restrições especificadas para o parâmetro de tipo correspondente do tipo genérico atual.

- ou -

typeArguments contém um elemento que é um tipo de ponteiro (IsPointer retorna true), um tipo by-ref (IsByRef retorna true) ou Void.

O método chamado não é suportado na classe base. As classes derivadas devem fornecer uma implementação.

Exemplos

O exemplo a seguir usa o MakeGenericType método para criar um tipo construído a partir da definição de tipo genérico para o Dictionary<TKey,TValue> tipo. O tipo construído representa um Dictionary<TKey,TValue> de objetos com chaves de Test cadeia de caracteres.

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
 */

Comentários

Para obter mais informações sobre essa API, consulte Comentários de API complementares para Type.MakeGenericType.

Aplica-se a

Produto Versões
.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

Confira também