This documentation is archived and is not being maintained.

MethodInfo.MakeGenericMethod Method

Substitutes the elements of an array of types for the type parameters of the current generic method definition, and returns a MethodInfo object representing the resulting constructed method.

Namespace:  System.Reflection
Assembly:  mscorlib (in mscorlib.dll)

abstract MakeGenericMethod : 
        typeArguments:Type[] -> MethodInfo 
override MakeGenericMethod : 
        typeArguments:Type[] -> MethodInfo 


Type: System.Type[]
An array of types to be substituted for the type parameters of the current generic method definition.

Return Value

Type: System.Reflection.MethodInfo
A MethodInfo object that represents the constructed method formed by substituting the elements of typeArguments for the type parameters of the current generic method definition.


The current MethodInfo does not represent a generic method definition. That is, IsGenericMethodDefinition returns false.


typeArguments is a null reference (Nothing in Visual Basic).


Any element of typeArguments is a null reference (Nothing in Visual Basic).


The number of elements in typeArguments is not the same as the number of type parameters of the current generic method definition.


An element of typeArguments does not satisfy the constraints specified for the corresponding type parameter of the current generic method definition.


This method is not supported.

The MakeGenericMethod method allows you to write code that assigns specific types to the type parameters of a generic method definition, thus creating a MethodInfo object that represents a particular constructed method. If the ContainsGenericParameters property of this MethodInfo object returns true, you can use it to invoke the method or to create a delegate to invoke the method.

Methods constructed with the MakeGenericMethod method can be open, that is, some of their type arguments can be type parameters of enclosing generic types. You might use such open constructed methods when you generate dynamic assemblies. For example, consider the following C#, Visual Basic, and C++ code.

class C
    T N<T,U>(T t, U u) {...}
    public V M<V>(V v)
        return N<V,int>(v, 42);

Class C
    Public Function N(Of T,U)(ByVal ta As T, ByVal ua As U) As T
    End Function
    Public Function M(Of V)(ByVal va As V ) As V
        Return N(Of V, Integer)(va, 42)
    End Function
End Class

ref class C
    generic <typename T, typename U> T N(T t, U u) {...}
    generic <typename V> V M(V v)
        return N<V, int>(v, 42);

The method body of M contains a call to method N, specifying the type parameter of M and the type Int32. The IsGenericMethodDefinition property returns false for method N<V,int>. The ContainsGenericParameters property returns true, so method N<V,int> cannot be invoked.

For a list of the invariant conditions for terms specific to generic methods, see the IsGenericMethod property. For a list of the invariant conditions for other terms used in generic reflection, see the IsGenericType property.

The following code example demonstrates the properties and methods of MethodInfo that support the examination of generic methods. The example does the following:

  • Defines a class that has a generic method.

  • Creates a MethodInfo that represents the generic method.

  • Displays properties of the generic method definition.

  • Assigns type arguments to the type parameters of the MethodInfo, and invokes the resulting constructed generic method.

  • Displays properties of the constructed generic method.

  • Retrieves the generic method definition from the constructed method and compares it to the original definition.

No code example is currently available or this language may not be supported.

.NET Framework

Supported in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Portable Class Library

Supported in: Portable Class Library

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.