导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

Type.IsGenericTypeDefinition 属性

2013/12/13

获取一个值,该值指示当前 Type 是否表示可以用来构造其他泛型类型的泛型类型定义。

Namespace:  System
程序集:  mscorlib(位于 mscorlib.dll 中)

public virtual bool IsGenericTypeDefinition { get; }

属性值

类型: System.Boolean
如果此 Type 对象表示泛型类型定义,则为 true;否则为 false

泛型类型定义是可用于构造其他类型的模板。例如,使用泛型类型定义 G<T>(以 C# 语法表示;在 Visual Basic 中为 G(Of T);在 C++ 中为 generic <typename T> ref class G),可通过使用包含 Int32 类型的泛型实参列表调用 MakeGenericType 方法来构造和实例化类型 G<int>(在 Visual Basic 中为 G(Of Integer))。给定一个表示此构造类型的 Type 对象,GetGenericTypeDefinition 方法将再次取回泛型类型定义。

使用 IsGenericTypeDefinition 属性来确定是否能够从当前类型创建新的类型。如果 IsGenericTypeDefinition 属性返回 true,那么您可以调用 MakeGenericType 方法来创建新的泛型类型。

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

下面的示例显示关于某个类型的信息,包括它是否为泛型类型定义。其中显示了一个构造类型、其泛型类型定义以及一个普通类型的信息。

说明注意:

要运行此示例,请参见生成具有静态 Windows Phone TextBlock 控件的示例


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

public class Example
{
   private static void DisplayGenericTypeInfo(System.Windows.Controls.TextBlock outputBlock, Type t)
   {
      outputBlock.Text += String.Format("\r\n{0}", t) + "\n";

      outputBlock.Text += String.Format("\tIs this a generic type definition? {0}",
          t.IsGenericTypeDefinition) + "\n";

      outputBlock.Text += String.Format("\tIs it a generic type? {0}",
          t.IsGenericType) + "\n";

      if (t.IsGenericType)
      {
         // If this is a generic type, display the type arguments.
         //
         Type[] typeArguments = t.GetGenericArguments();

         outputBlock.Text += String.Format("\tList type arguments ({0}):",
             typeArguments.Length) + "\n";

         foreach (Type tParam in typeArguments)
         {
            // If this is a type parameter, display its
            // position.
            //
            if (tParam.IsGenericParameter)
            {
               outputBlock.Text += String.Format("\t\t{0}\t(unassigned - parameter position {1})",
                   tParam,
                   tParam.GenericParameterPosition) + "\n";
            }
            else
            {
               outputBlock.Text += String.Format("\t\t{0}", tParam) + "\n";
            }
         }
      }
   }

   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      outputBlock.Text += String.Format("\r\n--- Display information about a constructed type, its") + "\n";
      outputBlock.Text += String.Format("    generic type definition, and an ordinary type.") + "\n";

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

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

      // Display information for an ordinary type.
      DisplayGenericTypeInfo(outputBlock, 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
 */


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示:
© 2014 Microsoft