Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Proprietà Type.IsGenericTypeDefinition

 

Data di pubblicazione: ottobre 2016

Ottiene un valore che indica se la classe Type corrente rappresenta una definizione di tipo generico, da cui è possibile costruire altri tipi generici.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

public virtual bool IsGenericTypeDefinition { get; }

Valore proprietà

Type: System.Boolean

true se l'oggetto Type rappresenta una definizione di tipo generico; in caso contrario, false.

Una definizione di tipo generico è un modello da cui è possibile costruire altri tipi. Ad esempio, dalla definizione di tipo generico G<T> (espressi nella sintassi c#; G(Of T) in Visual Basic o generic <typename T> ref class G in C++) è possibile costruire e creare istanze del tipo G<int> (G(Of Integer) in Visual Basic), chiamando la MakeGenericType metodo con un elenco di argomento generico che contiene il Int32 tipo. Dato un Type oggetto che rappresenta questo tipo costruito, il GetGenericTypeDefinition metodo ottiene la definizione di tipo generico nuovamente.

Utilizzare il IsGenericTypeDefinition proprietà per determinare se è possibile creare nuovi tipi dal tipo corrente. Se il IsGenericTypeDefinition restituisce proprietà true, è possibile chiamare il MakeGenericType metodo per creare nuovi tipi generici.

Per un elenco delle condizioni per i termini utilizzati nella reflection generica invariante, vedere la IsGenericType note relative alla proprietà.

Nell'esempio seguente visualizza informazioni su un tipo, incluso o meno una definizione di tipo generico. Vengono visualizzate informazioni per un tipo costruito, la definizione di tipo generico e un tipo ordinario.

using System;
using System.Reflection;
using System.Collections.Generic;

public class Test
{
    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);

        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)
            {
                // If this is a type parameter, display its
                // position.
                //
                if (tParam.IsGenericParameter)
                {
                    Console.WriteLine("\t\t{0}\t(unassigned - parameter position {1})",
                        tParam,
                        tParam.GenericParameterPosition);
                }
                else
                {
                    Console.WriteLine("\t\t{0}", tParam);
                }
            }
        }
    }

    public static void Main()
    {
        Console.WriteLine("\r\n--- Display information about a constructed type, its");
        Console.WriteLine("    generic type definition, and an ordinary type.");

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

        // Display information for the constructed type and its generic
        // type definition.
        DisplayGenericTypeInfo(d.GetType());
        DisplayGenericTypeInfo(d.GetType().GetGenericTypeDefinition());

        // Display information for an ordinary type.
        DisplayGenericTypeInfo(typeof(string));
    }
}

/* This example produces the following output:

--- Display information about a constructed type, its
    generic type definition, and an ordinary type.

System.Collections.Generic.Dictionary[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[TKey,TValue]
        Is this a generic type definition? True
        Is it a generic type? True
        List type arguments (2):
                TKey    (unassigned - parameter position 0)
                TValue  (unassigned - parameter position 1)

System.String
        Is this a generic type definition? False
        Is it a generic type? False
 */

.NET Framework
Disponibile da 2.0
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Torna all'inizio
Mostra: