Type.GetGenericArguments 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回表示封闭式泛型类型的类型参数或泛型类型定义的类型参数的 Type 对象的数组。
public:
virtual cli::array <Type ^> ^ GetGenericArguments();
public virtual Type[] GetGenericArguments ();
abstract member GetGenericArguments : unit -> Type[]
override this.GetGenericArguments : unit -> Type[]
Public Overridable Function GetGenericArguments () As Type()
返回
- Type[]
表示泛型类型的类型实参的 Type 对象的数组。 如果当前类型不是泛型类型,则返回一个空数组。
例外
基类不支持调用的方法。 派生类必须提供一个实现。
示例
下面的代码示例使用 GetGenericArguments 方法显示构造类型的类型参数及其泛型类型定义的类型参数。
此代码示例是为属性提供的更大示例的一部分 IsGenericTypeDefinition 。 请参阅示例输出的更大示例。
if ( t->IsGenericType )
{
// If this is a generic type, display the type arguments.
//
array<Type^>^typeArguments = t->GetGenericArguments();
Console::WriteLine( L"\tList type arguments ({0}):",
typeArguments->Length );
System::Collections::IEnumerator^ myEnum =
typeArguments->GetEnumerator();
while ( myEnum->MoveNext() )
{
Type^ tParam = safe_cast<Type^>(myEnum->Current);
// If this is a type parameter, display its
// position.
//
if ( tParam->IsGenericParameter )
{
Console::WriteLine(
L"\t\t{0}\t(unassigned - parameter position {1})",
tParam, tParam->GenericParameterPosition );
}
else
{
Console::WriteLine( L"\t\t{0}", tParam );
}
}
}
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);
}
}
}
If t.IsGenericType Then
' If this is a generic type, display the type arguments.
'
Dim typeArguments As Type() = t.GetGenericArguments()
Console.WriteLine(vbTab & "List type arguments (" _
& typeArguments.Length & "):")
For Each tParam As Type In typeArguments
' If this is a type parameter, display its position.
'
If tParam.IsGenericParameter Then
Console.WriteLine(vbTab & vbTab & tParam.ToString() _
& vbTab & "(unassigned - parameter position " _
& tParam.GenericParameterPosition & ")")
Else
Console.WriteLine(vbTab & vbTab & tParam.ToString())
End If
Next tParam
End If
注解
数组元素按它们出现在泛型类型的类型参数列表中的顺序返回。
如果当前类型是封闭式构造类型 (即, ContainsGenericParameters 属性返回
false
) ,则方法返回的数组 GetGenericArguments 包含已分配给泛型类型定义的泛型类型参数的类型。如果当前类型是泛型类型定义,则数组包含类型参数。
如果当前类型为开放式构造类型 (即,则 ContainsGenericParameters 属性返回
true
) 在该构造类型中,未将特定类型分配给封闭泛型类型或方法的所有类型参数和类型参数,数组同时包含类型和类型参数。 使用 IsGenericParameter 属性将它们区分开来。 有关此方案的演示,请参阅属性的代码示例 ContainsGenericParameters 。
有关泛型反射中使用的术语的固定条件列表,请参阅 IsGenericType 属性注解。