Tuesday, March 1, 2011

Reflection - Getting the generic parameters from a System.Type instance

If I have the following code:

MyType<int> anInstance = new MyType<int>();
Type type = anInstance.GetType();

How can I find out which type parameter(s) "anInstance" was instantiated with, by looking at the type variable ? Is it possible ?

From stackoverflow
  • Use Type.GetGenericArguments. For example:

    using System;
    using System.Collections.Generic;
    
    public class Test
    {
        static void Main()
        {
            var dict = new Dictionary<string, int>();
    
            Type type = dict.GetType();
            Console.WriteLine("Type arguments:");
            foreach (Type arg in type.GetGenericArguments())
            {
                Console.WriteLine("  {0}", arg);
            }
        }
    }
    

    Output:

    Type arguments:
      System.String
      System.Int32
    
  • Use Type.GetGenericArguments(). For example:

    using System;
    using System.Reflection;
    
    namespace ConsoleApplication1 {
      class Program {
        static void Main(string[] args) {
          MyType<int> anInstance = new MyType<int>();
          Type type = anInstance.GetType();
          foreach (Type t in type.GetGenericArguments())
            Console.WriteLine(t.Name);
          Console.ReadLine();
        }
      }
      public class MyType<T> { }
    }
    

    Output: Int32

0 comments:

Post a Comment