Type.MakeGenericType(Type[]) Metoda

Definicja

Zastępuje elementy tablicy typów dla parametrów typu bieżącej definicji typu ogólnego i zwraca Type obiekt reprezentujący wynikowy typ skonstruowany.

C#
public abstract Type MakeGenericType(params Type[] typeArguments);
C#
public virtual Type MakeGenericType(params Type[] typeArguments);

Parametry

typeArguments
Type[]

Tablica typów, które mają zostać zastąpione parametrami typu bieżącego typu ogólnego.

Zwraca

Reprezentujący Type skonstruowany typ utworzony przez zastąpienie elementów typeArguments parametrów typu bieżącego typu ogólnego.

Wyjątki

Bieżący typ nie reprezentuje definicji typu ogólnego. Oznacza to, IsGenericTypeDefinition że zwraca wartość false.

typeArguments to null.

-lub-

Dowolny element to typeArgumentsnull.

Liczba elementów w elemencie typeArguments nie jest taka sama jak liczba parametrów typu w bieżącej definicji typu ogólnego.

-lub-

Dowolny element typeArguments nie spełnia ograniczeń określonych dla odpowiedniego parametru typu bieżącego typu.

-lub-

typeArguments zawiera element, który jest typem wskaźnika (IsPointer zwraca true), typem by-ref (IsByRef zwraca true) lub Void.

Wywoływana metoda nie jest obsługiwana w klasie bazowej. Klasy pochodne muszą zapewnić implementację.

Przykłady

W poniższym przykładzie użyto MakeGenericType metody , aby utworzyć skonstruowany typ z definicji typu ogólnego dla Dictionary<TKey,TValue> typu. Skonstruowany typ reprezentuje Dictionary<TKey,TValue>Test obiekt z kluczami ciągów.

C#
using System;
using System.Reflection;
using System.Collections.Generic;

public class Test
{
    public static void Main()
    {
        Console.WriteLine("\r\n--- Create a constructed type from the generic Dictionary type.");

        // Create a type object representing the generic Dictionary 
        // type, by omitting the type arguments (but keeping the 
        // comma that separates them, so the compiler can infer the
        // number of type parameters).      
        Type generic = typeof(Dictionary<,>);
        DisplayTypeInfo(generic);

        // Create an array of types to substitute for the type
        // parameters of Dictionary. The key is of type string, and
        // the type to be contained in the Dictionary is Test.
        Type[] typeArgs = { typeof(string), typeof(Test) };

        // Create a Type object representing the constructed generic
        // type.
        Type constructed = generic.MakeGenericType(typeArgs);
        DisplayTypeInfo(constructed);

        // Compare the type objects obtained above to type objects
        // obtained using typeof() and GetGenericTypeDefinition().
        Console.WriteLine("\r\n--- Compare types obtained by different methods:");

        Type t = typeof(Dictionary<String, Test>);
        Console.WriteLine("\tAre the constructed types equal? {0}", t == constructed);
        Console.WriteLine("\tAre the generic types equal? {0}", 
            t.GetGenericTypeDefinition() == 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:

--- Create a constructed type from the generic Dictionary type.

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

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

--- Compare types obtained by different methods:
        Are the constructed types equal? True
        Are the generic types equal? True
 */

Uwagi

Aby uzyskać więcej informacji na temat tego interfejsu API, zobacz Uwagi dotyczące dodatkowego interfejsu API dla type.MakeGenericType.

Dotyczy

Produkt Wersje
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Zobacz też