static void Main(string[] args)
        {
            try
            {
                Test test   = new Test();
                Type myType = test.GetType();

                //string filterCriteria = "IEnumerable`1";
                Type   typeA          = Type.GetType("ConsoleApplication1.A");
                string filterCriteria = "System.Collections.Generic.IEnumerable`1[[" +
                                        typeA.AssemblyQualifiedName +
                                        "]]";

                // Specify the TypeFilter delegate that compares the
                // interfaces against filter criteria.
                TypeFilter myFilter     = new TypeFilter(MyInterfaceFilter);
                Type[]     myInterfaces = myType.FindInterfaces(myFilter,
                                                                filterCriteria);
                if (myInterfaces.Length > 0)
                {
                    Console.WriteLine("\n{0} implements the interface {1}.",
                                      myType, filterCriteria);
                    for (int j = 0; j < myInterfaces.Length; j++)
                    {
                        Console.WriteLine("Interfaces supported: {0}.",
                                          myInterfaces[j].ToString());
                    }
                }
                else
                {
                    Console.WriteLine(
                        "\n{0} does not implement the interface {1}.",
                        myType, filterCriteria);
                }
            }
            catch (ArgumentNullException e)
            {
                Console.WriteLine("ArgumentNullException: " + e.Message);
            }
            catch (TargetInvocationException e)
            {
                Console.WriteLine("TargetInvocationException: " + e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception: " + e.Message);
            }
        }