Check if a Type represents a type parameter in the definition of a generic type or method in CSharp

Description

The following code shows how to check if a Type represents a type parameter in the definition of a generic type or method.

Example


using System;/*from   w w w  .  j av a2 s. c o  m*/
using System.Reflection;

public interface ITest {}

public class Base {}

public class Test<T,U> 
    where T : Base, ITest 
    where U : class, new() {}

public class Derived : Base, ITest {}

public class Example
{
    public static void Main()
    {
        Type def = typeof(Test<,>);
        Console.WriteLine("\r\nExamining generic type {0}", def);

        Type[] defparams = def.GetGenericArguments();
        foreach (Type tp in defparams)
        {
            Console.WriteLine("\r\nType parameter: {0}", tp.Name);
            Console.WriteLine("\t{0}", ListGenericParameterAttributes(tp));

        }
    }
    private static string ListGenericParameterAttributes(Type t)
    {
        string retval;
        GenericParameterAttributes gpa = t.GenericParameterAttributes;
        GenericParameterAttributes variance = gpa & GenericParameterAttributes.VarianceMask;

        if (t.IsGenericType)
        {
            Type[] typeArguments = t.GetGenericArguments();
        
            foreach (Type tParam in typeArguments)
            {
                if (tParam.IsGenericParameter)
                {
                    Console.WriteLine("\t\t{0}\t(unassigned - parameter position {1})",
                        tParam,
                        tParam.GenericParameterPosition);
                }
                else
                {
                    Console.WriteLine("\t\t{0}", tParam);
                }
            }
        }
        return "";
    }
}

The code above generates the following result.





















Home »
  C# Tutorial »
    Reflection »




Array
Constructor
Event
Field
Interface
Method
Properties
Type