Lire en anglais

Partager via


Type.GetGenericTypeDefinition Méthode

Définition

Retourne un objet Type qui représente une définition de type générique à partir de laquelle le type générique actuel peut être construit.

C#
public abstract Type GetGenericTypeDefinition();
C#
public virtual Type GetGenericTypeDefinition();

Retours

Objet Type représentant un type générique à partir duquel le type actuel peut être construit.

Exceptions

Le type actuel n’est pas un type générique. Autrement dit, IsGenericType retourne false.

La méthode appelée n’est pas prise en charge dans la classe de base. Les classes dérivées doivent fournir une implémentation.

Exemples

L’exemple de code suivant crée une instance d’un type construit à l’aide de la création d’instance ordinaire, puis utilise les GetType méthodes et GetGenericTypeDefinition pour récupérer le type construit et la définition de type générique. Cet exemple utilise le type générique Dictionary<TKey,TValue> ; le type construit représente un Dictionary<TKey,TValue> d’objets avec des clés de Test chaîne.

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

public class Test
{
    public static void Main()
    {
        Console.WriteLine("\r\n--- Get the generic type that defines a constructed type.");

        // Create a Dictionary of Test objects, using strings for the
        // keys.       
        Dictionary<string, Test> d = new Dictionary<string, Test>();

        // Get a Type object representing the constructed type.
        //
        Type constructed = d.GetType();
        DisplayTypeInfo(constructed);

        Type generic = constructed.GetGenericTypeDefinition();
        DisplayTypeInfo(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:

--- Get the generic type that defines a constructed type.

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

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

Remarques

Une définition de type générique est un modèle à partir duquel d’autres types peuvent être construits. Par exemple, à partir de la définition G<T> de type générique (exprimée en syntaxe C# ; G(Of T) en Visual Basic ou generic <typename T> ref class G en C++), vous pouvez construire et instancier le type G<int> (G(Of Integer) en Visual Basic). Étant donné un Type objet représentant ce type construit, la GetGenericTypeDefinition méthode retourne la définition de type générique.

Si deux types construits sont créés à partir de la même définition de type générique, à l’aide des mêmes arguments de type, la GetGenericTypeDefinition méthode retourne le même Type objet pour les deux types.

Si vous appelez la GetGenericTypeDefinition méthode sur un Type objet qui représente déjà une définition de type générique, elle retourne le actuel Type.

Important

Un tableau de types génériques n’est pas lui-même générique. Dans le code A<int>[] v; C# ou visual Basic Dim v() As A(Of Integer), le type de variable v n’est pas générique. Utilisez IsGenericType pour déterminer si un type est générique avant d’appeler GetGenericTypeDefinition.

Pour obtenir la liste des conditions indifférentes pour les termes utilisés dans la réflexion générique, consultez les notes sur la propriété IsGenericType.

S’applique à

Produit Versions
.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

Voir aussi