MethodInfo.GetGenericArguments 方法

定義

傳回 Type 物件的陣列,這些物件代表泛型方法的類型引數,或泛型方法定義的類型參數。

public:
 override cli::array <Type ^> ^ GetGenericArguments();
public override Type[] GetGenericArguments ();
[System.Runtime.InteropServices.ComVisible(true)]
public override Type[] GetGenericArguments ();
override this.GetGenericArguments : unit -> Type[]
[<System.Runtime.InteropServices.ComVisible(true)>]
override this.GetGenericArguments : unit -> Type[]
Public Overrides Function GetGenericArguments () As Type()

傳回

Type[]

Type 物件的陣列,這些物件表示泛型方法的型別引數,或泛型方法定義的型別參數。 如果目前的方法不是泛型方法,則會傳回空白陣列。

屬性

例外狀況

不支援這個方法。

範例

下列程式碼範例示範如何取得泛型方法的類型引數,並加以顯示。

這個範例是針對 方法提供的較大範例的 MakeGenericMethod 一部分。

// If this is a generic method, display its type arguments.
//
if (mi->IsGenericMethod)
{
    array<Type^>^ typeArguments = mi->GetGenericArguments();

    Console::WriteLine("\tList type arguments ({0}):", 
        typeArguments->Length);

    for each (Type^ tParam in typeArguments)
    {
        // IsGenericParameter is true only for generic type
        // parameters.
        //
        if (tParam->IsGenericParameter)
        {
            Console::WriteLine("\t\t{0}  parameter position {1}" +
                "\n\t\t   declaring method: {2}",
                tParam,
                tParam->GenericParameterPosition,
                tParam->DeclaringMethod);
        }
        else
        {
            Console::WriteLine("\t\t{0}", tParam);
        }
    }
}
// If this is a generic method, display its type arguments.
//
if (mi.IsGenericMethod)
{
    Type[] typeArguments = mi.GetGenericArguments();

    Console.WriteLine("\tList type arguments ({0}):",
        typeArguments.Length);

    foreach (Type tParam in typeArguments)
    {
        // IsGenericParameter is true only for generic type
        // parameters.
        //
        if (tParam.IsGenericParameter)
        {
            Console.WriteLine("\t\t{0}  parameter position {1}" +
                "\n\t\t   declaring method: {2}",
                tParam,
                tParam.GenericParameterPosition,
                tParam.DeclaringMethod);
        }
        else
        {
            Console.WriteLine("\t\t{0}", tParam);
        }
    }
}
' If this is a generic method, display its type arguments.
'
If mi.IsGenericMethod Then
    Dim typeArguments As Type() = mi.GetGenericArguments()
    
    Console.WriteLine(vbTab & "List type arguments ({0}):", _
        typeArguments.Length)
    
    For Each tParam As Type In typeArguments
        ' IsGenericParameter is true only for generic type
        ' parameters.
        '
        If tParam.IsGenericParameter Then
            Console.WriteLine(vbTab & vbTab _
                & "{0}  parameter position: {1}" _
                & vbCrLf & vbTab & vbTab _
                & "   declaring method: {2}", _
                tParam,  _
                tParam.GenericParameterPosition, _
                tParam.DeclaringMethod)
        Else
            Console.WriteLine(vbTab & vbTab & tParam.ToString())
        End If
    Next tParam
End If

備註

傳回陣列的專案會依泛型方法的類型參數清單中出現的順序排列。

  • 如果目前方法是封閉式建構方法 (, ContainsGenericParameters 則 屬性會傳回) ,則 方法所傳回 falseGetGenericArguments 陣列會包含已指派給泛型方法定義之泛型型別參數的類型。

  • 如果目前的方法是泛型方法定義,陣列會包含型別參數。

  • 如果目前的方法是開放式建構方法 (, ContainsGenericParameters 則 屬性會傳回 true) ,其中特定類型已指派給某些類型參數,而封入泛型型別的類型參數已指派給其他型別參數,則陣列會同時包含型別和型別參數。 IsGenericParameter使用 屬性來區分它們。 如需此案例的示範,請參閱 屬性的程式 ContainsGenericParameters 代碼範例。

如需泛型方法特定詞彙的不變異條件清單,請參閱 IsGenericMethod 屬性。 如需泛型反映中其他詞彙的不變異條件清單,請參閱 Type.IsGenericType 屬性。

適用於

另請參閱