System.Type.GetGenericTypeDefinition 方法

方法描述

返回一个表示可用于构造当前泛型类型的泛型类型定义的 Type 对象。

语法定义(C# System.Type.GetGenericTypeDefinition 方法 的用法)

public virtual Type GetGenericTypeDefinition()

参数/返回值

参数值/返回值 参数类型/返回类型 参数描述/返回描述
返回值 System.Type 表示可用于构造当前类型的泛型类型的 Type 对象。

提示和注释

泛型类型定义是可用于构造其他类型的模板。 例如,可使用泛型类型定义 G(以 C# 语法表示;在 Visual Basic 中为 G(Of T);在 C++ 中为 generic ref class G)构造和初始化类型 G(在 Visual Basic 中为 G(Of Integer))。 给定一个表示此构造类型的 Type 对象,GetGenericTypeDefinition 方法将返回泛型类型定义。

如果使用相同的类型实参从相同的泛型类型定义创建两个构造类型,GetGenericTypeDefinition 方法对两个类型都返回相同的 Type 对象。

如果调用已经表示泛型类型定义的 Type 对象的 GetGenericTypeDefinition 方法,它将返回当前的 Type。

重要事项

泛型类型的数组本身不是泛型。 在 C# 代码 A[] v; 或在 Visual Basic 代码 Dim v() As A(Of Integer) 中,变量 v 的类型不是泛型。 在调用 GetGenericTypeDefinition 之前,应使用 IsGenericType 来确定某个类型是否为泛型。

有关泛型反射中使用的术语的固定条件列表,请参见 IsGenericType 属性备注。

System.Type.GetGenericTypeDefinition 方法例子

此示例使用泛型 Dictionary 类型;构造类型表示具有字符串键的 Test 对象的 Dictionary

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 d = new Dictionary();

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

异常

异常 异常描述
InvalidOperationException 当前对象不是泛型类型。 即 IsGenericType 返回 false。
NotSupportedException 基类不支持所调用的方法。 派生类必须提供实现。

命名空间

namespace: System

程序集: mscorlib(在 mscorlib.dll 中)

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1 受以下版本支持:

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。