Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Type.GetGenericTypeDefinition méthode ()

 

Date de publication : novembre 2016

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.

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

public virtual Type GetGenericTypeDefinition()

Valeur de retour

Type: System.Type

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

Exception Condition
InvalidOperationException

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

NotSupportedException

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.

Une définition de type générique est un modèle à partir de laquelle d’autres types peuvent être construits. Par exemple, à partir de la définition de type générique G<T> (exprimé 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, le 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, le GetGenericTypeDefinition méthode retourne la même Type objet pour les deux types.

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

System_CAPS_importantImportant

Un tableau de types génériques n’est pas lui-même générique. Dans le code c# A<int>[] v; ou le code 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 invariantes pour les termes utilisés dans la réflexion générique, consultez la IsGenericType la section Notes de la propriété.

L’exemple de code suivant crée une instance d’un type construit à l’aide de la création d’instance ordinaire, puis utilise le GetType et GetGenericTypeDefinition méthodes 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> type ; le type construit représente un Dictionary<TKey, TValue> de Test objets avec des clés de chaîne.

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

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 2.0
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: