Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte.
Traduction
Source
Ce sujet n'a pas encore été évalué - Évaluez ce sujet

Type.GenericParameterPosition, propriété

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, lorsque l'objet Type représente un paramètre de type d'un type générique ou une méthode générique.

Espace de noms :  System
Assembly :  mscorlib (dans mscorlib.dll)
public virtual int GenericParameterPosition { get; }

Valeur de propriété

Type : System.Int32
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.
Exception Condition
InvalidOperationException

Le type actuel ne représente pas de paramètre de type. En d'autres termes, IsGenericParameter retourne la valeur false.

La propriété GenericParameterPosition 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, dans laquelle le paramètre de type était défini à l'origine. Les propriétés DeclaringType et DeclaringMethod identifient la définition du type ou de la méthode générique :

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

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

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


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 lui-même. Vous pouvez obtenir un MethodInfo pour GetSomething et obtenir le type de retour à partir de cela. Lorsque vous examinez les paramètres de type du type de retour, GenericParameterPosition retourne zéro pour les deux. La position de V est zéro parce que V est le premier paramètre de type dans la liste des paramètres de type de la classe A. La position de X est zéro parce que X est le premier paramètre de type dans la liste des paramètres de type de GetSomething.

Remarque Remarque

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

L'exemple suivant définit une classe générique avec deux paramètres de type, puis une deuxième classe générique qui en dérive. La classe de base de la classe dérivée a deux arguments de type : le premier est Int32 et le deuxième 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 rapportées par la propriété GenericParameterPosition.


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


.NET Framework

Pris en charge dans : 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Pris en charge dans :

Windows 7, Windows Vista SP1 ou ultérieur, Windows XP SP3, Windows XP SP2 Édition x64, Windows Server 2008 (installation minimale non prise en charge), Windows Server 2008 R2 (installation minimale prise en charge avec SP1 ou version ultérieure), Windows Server 2003 SP2

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.
Cela vous a-t-il été utile ?
(1500 caractères restants)
Contenu de la communauté Ajouter
Annotations FAQ