Lire en anglais

Partager via


Type.GenericParameterPosition Propriété

Définition

Obtient la position du paramètre de type dans la liste des paramètres de type du type générique ou de la méthode qui a déclaré le paramètre, quand l'objet Type représente un paramètre de type d'un type générique ou une méthode générique.

C#
public abstract int GenericParameterPosition { get; }
C#
public virtual int GenericParameterPosition { get; }

Valeur de propriété

Position d'un paramètre de type dans la liste des paramètres de type du type générique ou de la méthode qui a défini le paramètre. La numérotation des positions commence à zéro.

Exceptions

Le type actuel ne représente pas un paramètre de type. Autrement dit, IsGenericParameter retourne false.

Exemples

L’exemple suivant définit une classe générique avec deux paramètres de type et définit une deuxième classe générique qui dérive de la première classe. La classe de base de la classe dérivée a deux arguments de type : le premier est Int32et le second est un paramètre de type du type dérivé. L’exemple affiche des informations sur ces classes génériques, y compris les positions signalées par la GenericParameterPosition propriété .

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

// Define a base class with two type parameters.
public class Base<T, U> { }

// Define a derived class. The derived class inherits from a constructed
// class that meets the following criteria:
//   (1) Its generic type definition is Base<T, U>.
//   (2) It specifies int for the first type parameter.
//   (3) For the second type parameter, it uses the same type that is used
//       for the type parameter of the derived class.
// Thus, the derived class is a generic type with one type parameter, but
// its base class is an open constructed type with one type argument and
// one type parameter.
public class Derived<V> : Base<int, V> { }

public class Test
{
    public static void Main()
    {
        Console.WriteLine(
            "\r\n--- Display a generic type and the open constructed");
        Console.WriteLine("    type from which it is derived.");

        // Create a Type object representing the generic type definition 
        // for the Derived type, by omitting the type argument. (For
        // types with multiple type parameters, supply the commas but
        // omit the type arguments.) 
        //
        Type derivedType = typeof(Derived<>);
        DisplayGenericTypeInfo(derivedType);

        // Display its open constructed base type.
        DisplayGenericTypeInfo(derivedType.BaseType);
    }

    private static void DisplayGenericTypeInfo(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);

        Console.WriteLine("\tDoes it have unassigned generic parameters? {0}", 
            t.ContainsGenericParameters);

        if (t.IsGenericType)
        {
            // If this is a generic type, display the type arguments.
            //
            Type[] typeArguments = t.GetGenericArguments();

            Console.WriteLine("\tList type arguments ({0}):", 
                typeArguments.Length);

            foreach (Type tParam in typeArguments)
            {
                // IsGenericParameter is true only for generic type
                // parameters.
                //
                if (tParam.IsGenericParameter)
                {
                    Console.WriteLine(
                        "\t\t{0}  (unassigned - parameter position {1})",
                        tParam,
                        tParam.GenericParameterPosition);
                }
                else
                {
                    Console.WriteLine("\t\t{0}", tParam);
                }
            }
        }
    }
}

/* This example produces the following output:

--- Display a generic type and the open constructed
    type from which it is derived.

Derived`1[V]
        Is this a generic type definition? True
        Is it a generic type? True
        Does it have unassigned generic parameters? True
        List type arguments (1):
                V  (unassigned - parameter position 0)

Base`2[System.Int32,V]
        Is this a generic type definition? False
        Is it a generic type? True
        Does it have unassigned generic parameters? True
        List type arguments (2):
                System.Int32
                V  (unassigned - parameter position 0)
 */

Remarques

La GenericParameterPosition propriété retourne la position d’un paramètre de type dans la liste de paramètres de la définition de type générique ou de la définition de méthode générique où le paramètre de type a été défini à l’origine. Les DeclaringType propriétés et DeclaringMethod identifient le type générique ou la définition de méthode :

  • Si la DeclaringMethod propriété retourne un MethodInfo, qui MethodInfo représente une définition de méthode générique, et l’objet actuel Type représente un paramètre de type de cette définition de méthode générique.

  • Si la DeclaringMethod propriété retourne null, la DeclaringType propriété renvoie toujours un Type objet représentant une définition de type générique, et l’objet actuel Type représente un paramètre de type de cette définition de type générique.

Pour fournir le contexte correct pour la valeur de la GenericParameterPosition propriété, il est nécessaire d’identifier le type ou la méthode générique auquel appartient un paramètre de type. Par exemple, considérez la valeur de retour de la méthode GetSomething générique dans le code suivant :

C#
public class B<T, U> { }
public class A<V>
{
    public B<V, X> GetSomething<X>()
    {
        return new B<V, X>();
    }
}

Le type retourné par GetSomething dépend des arguments de type fournis à la classe A et à GetSomething elle-même. Vous pouvez obtenir un MethodInfo pour GetSomething, et à partir de celui-ci, vous pouvez obtenir le type de retour. Lorsque vous examinez les paramètres de type du type de retour, GenericParameterPosition retourne 0 pour les deux. La position de V est 0, car V est le premier paramètre de type dans la liste des paramètres de type pour la classe A. La position de X est 0, car X est le premier paramètre de type dans la liste des paramètres de type pour GetSomething.

Notes

L’appel de la GenericParameterPosition propriété provoque une exception si le actuel Type ne représente pas un paramètre de type. Lorsque vous examinez les arguments de type d’un type construit ouvert, utilisez la IsGenericParameter propriété pour déterminer quels sont les paramètres de type et les types. La IsGenericParameter propriété retourne true pour un paramètre de type ; vous pouvez ensuite utiliser la GenericParameterPosition méthode pour obtenir sa position et utiliser les DeclaringMethod propriétés et DeclaringType pour déterminer la méthode générique ou la définition de type qui la définit.

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