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.