Я недавно столкнулся с этой проблемой. Я понимаю, что это старый вопрос, но подумал, что кто-то может найти полезное решение, которое я нашел (используя net 4.0).
У меня была такая установка:
public interface ISomeInterface{
String GetEntityType{ get; }
}
public abstract class BaseClass : ISomeInterface{
public String GetEntityType {
get{ return this.GetType().ToString(); }
}
}
public class ChildA : BaseClass { }
public class ChildB : BaseClass { }
Я создал фабричный метод:
public static dynamic GetRealType { ISomeInterface param } {
return Activator.CreateInstance("dllname", param.GetEntityType);
}
Создание объекта как динамического типа было тем, что решило его для меня. Я вывел тип, используя метод:
public void DoSomething<T>(T param){
IList<T> list = somecode...
}
это позволило мне сделать вызов метода и позволить .net выводить тип
public void myMethod( ISomeInterface param ) {
dynamic value = Factory.GetRealType ( param );
DoSomething(value);
}
Надеюсь, меня это не смущало, и на самом деле это помогает, извините за стену текста