je le code suivantListe <T> algorithmes de coulée et des considérations de performance
class Program
{
static void Main(string[] args)
{
List<A> aList = new List<A>();
var aObj = new A();
aObj.Go(aList.Cast<IB>());
}
}
class A : IB
{
public void Go(IEnumerable<IB> interfaceList)
{
foreach (IB ibby in interfaceList)
{
Console.WriteLine("Here");
}
}
}
interface IB
{
void Go(IEnumerable<IB> interfaceList);
}
}
J'ai essayé d'abord passer une liste mais doesn't work. Après beaucoup d'aide de SO j'ai trouvé que passer IEnumerable est le seul moyen de faire passer les objets comme .ofType (IB).
Malheureusement pour moi, dans mon code la ligne suivante sera exécuté des milliers de fois:
aList.Cast<IB>();
Je me demandais si quelqu'un savait comment il a été mis en œuvre algorithmiquement (en IL) et que son ordre de temps est. C'est-à-dire, est-ce plus rapide qu'une boucle foreach qui jette juste chaque élément, ou est-ce exactement ce qu'il fait?
EDIT La classe principale doit gérer une liste des objets réels. Mais le lecteur est seulement autorisé à les toucher à travers l'interface.
Cela pourrait changer complètement la question, mais que se passerait-il si A avait besoin d'une liste interne d'IB qui reflétait exactement la liste principale de A? – DevinB
@devinb: Je ne suis pas vraiment sûr de ce que vous voulez dire. Voulez-vous dire en tant que variable membre? Vous auriez à faire un générique; alors vous pourriez utiliser le même tour. Si ce n'est pas assez d'information, je suggère que vous posiez une nouvelle question pour ce bit en donnant plus de détails. –