J'ai récemment fait face à ce problem..I réaliser c'est une vieille question, mais pensé que quelqu'un pourrait trouver utile la solution que j'ai trouvé (en utilisant net 4,0). Ce est la configuration que j'ai eu:
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 { }
Ce que je faisais était de créer une méthode de fabrication:
public static dynamic GetRealType { ISomeInterface param } {
return Activator.CreateInstance("dllname", param.GetEntityType);
}
Création de l'objet comme un type dynamique est ce qui a résolu le problème pour moi. Je jugeai le type en ayant une méthode:
public void DoSomething<T>(T param){
IList<T> list = somecode...
}
cela m'a permis de faire un appel à la méthode et laisser .net déduire le type
public void myMethod(ISomeInterface param) {
dynamic value = Factory.GetRealType (param);
DoSomething(value);
}
espoir que je ne l'ai pas tout confus et il aide en fait, aussi, désolé pour le mur du texte
IList est une interface, vous ne pouvez pas nouveau il. Vous devez créer un nouveau type qui implémente IList tel que Liste . –