Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Type.GetGenericTypeDefinition ()

 

Publicado: octubre de 2016

Devuelve un objeto Type que representa una definición de tipo genérico a partir de la cual se puede construir el tipo genérico actual.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

public virtual Type GetGenericTypeDefinition()

Valor devuelto

Type: System.Type

Objeto Type que representa un tipo genérico a partir del cual se puede construir el tipo actual.

Exception Condition
InvalidOperationException

El tipo actual no es un tipo genérico. Es decir, IsGenericType devuelve false.

NotSupportedException

No se admite el método invocado en la clase base. Las clases derivadas deben proporcionar una implementación.

Una definición de tipo genérico es una plantilla desde la que se pueden construir otros tipos. Por ejemplo, desde la definición de tipo genérico G<T> (expresado en sintaxis de C#; G(Of T) en Visual Basic o generic <typename T> ref class G en C++) puede construir y crear instancias del tipo G<int> (G(Of Integer) en Visual Basic). Dado un Type construido de objeto que representa este tipo, el GetGenericTypeDefinition método devuelve la definición de tipo genérico.

Si dos tipos construidos se crean a partir de la misma definición de tipo genérico, usando los mismos argumentos de tipo, el GetGenericTypeDefinition método devuelve el mismo Type objeto para ambos tipos.

Si se llama a la GetGenericTypeDefinition método en un Type objeto que ya representa una definición de tipo genérico, devuelve el valor actual Type.

System_CAPS_importantImportante

Una matriz de tipos genéricos no es genérico en sí mismo. En el código de C# A<int>[] v; o el código de Visual Basic Dim v() As A(Of Integer), el tipo de variable v no es genérico. Use IsGenericType para determinar si un tipo es genérico antes de llamar a GetGenericTypeDefinition.

Para obtener una lista de las condiciones invariables de términos que se usan en la reflexión genérica, vea la IsGenericType comentarios de la propiedad.

En el ejemplo de código siguiente se crea una instancia de un tipo construido mediante la creación de instancias normal y, a continuación, usa el GetType y GetGenericTypeDefinition métodos para recuperar el tipo construido y la definición de tipo genérico. Este ejemplo utiliza la interfaz genérica Dictionary<TKey, TValue> tipo; el tipo construido representa un Dictionary<TKey, TValue> de Test objetos con claves de cadena.

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

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 2.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: