Leggi in inglese

Condividi tramite


Type.IsGenericTypeDefinition Proprietà

Definizione

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

C#
public virtual bool IsGenericTypeDefinition { get; }

Valore della proprietà

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

Esempio

Nell'esempio seguente vengono visualizzate informazioni su un tipo, incluso se si tratta di una definizione di tipo generica. Le informazioni vengono visualizzate per un tipo costruito, per la definizione di tipo generico e per un tipo ordinario.

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

Commenti

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

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

Per un elenco delle condizioni invariabili relative ai termini usati dal processo di reflection generico, vedere i commenti sulla proprietà IsGenericType.

Si applica a

Prodotto Versioni
.NET 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 2.0, 2.1

Vedi anche