I have a peculiar problem here. I want to extract some generic types, which implements a generic interface from an assembly. I can accumulate all the types from the assembly but can not search for a particular implemented type from that type collection. Here are my code I am using, can you please point out what is the wrong with it? Or how can I achieve the goal?
using System.Reflection;
using System;
using System.Collections.Generic;
namespace TypeTest
{
class Program
{
public static void Main(string[] args)
{
Test<int>();
Console.ReadKey(true);
}
static void Test<T>(){
var types = Assembly.GetExecutingAssembly().GetTypes();
// It prints Types found = 4
Console.WriteLine("Types found = {0}", types.Length);
var list = new List<Type>();
// Searching for types of type ITest<T>
foreach(var type in types){
if (type.Equals(typeof(ITest<>))) {
list.Add(type);
}
}
// Here it prints ITest type found = 1
// Why? It should prints 3 instead of 1,
// How to correct this?
Console.WriteLine("ITest type found = {0}", list.Count);
}
}
public interface ITest<T>
{
void DoSomething(T item);
}
public class Test1<T> : ITest<T>
{
public void DoSomething(T item)
{
Console.WriteLine("From Test1 {0}", item);
}
}
public class Test2<T> : ITest<T>
{
public void DoSomething(T item)
{
Console.WriteLine("From Test2 {0}", item);
}
}
}