Quelqu'un peut-il aider .. J'ai une liste générique comme si SO
IList<itemTp>
3 Réponses :
désolé si quelque chose ne va pas, je n'ai pas d'éditeur C # installé ici, mais c'est quelque chose comme ça:
Array.Sort( itemTps, delegate(ItemTp a, ItemTp b) { return secondList.IndexOf(a.Code) - secondList.IndexOf(b.Code); });
Oui .. Je pensais seulement au comparateur. Ici, c'est: Stackoverflow.com/questions/15486/sorting-an-ilist-in-c < / a>
Vous devrez créer un IComparer qui comparera les éléments basés sur l'état de votre autre liste. L'avantage de l'utilisation d'un ICOMPARER est que vous pourrez créer la logique de mise en cache dans votre classe afin d'éviter les recherches répétées () de cette optimisation. De plus, vous serez en mesure de conserver plusieurs "autres" listes pouvant être utilisées le cas échéant.
myList.Sort(new ItemTpComparer(otherList));
Je ne dirais pas qu'il y a un avantage. Vous pouvez transmettre le délégué à une méthode d'instance de la même manière que vous transmettez l'interface et que vous avez une logique que vous souhaitez là-bas.
Cela a l'air génial, juste une question, vous passez A et B dans l'index de sur une autre partie ... Alors, que se passerait-il si j'avais "TestMenow" et "TestMelater" .. Indexof va retourner 6 pour chacun non ??
Je ne comprends pas votre commentaire. Si le testMenow et le testMater sont dans une autre liste, ils ne peuvent pas être à l'index 6.
@Groo: Vous pouvez avoir une logique que vous voulez là-bas, true, mais vous devez définir un dictionnaire en dehors de votre bloc de délégué pour contenir des valeurs mises en cache, etc. Définition d'un ICOMPARER vous permet d'encapsuler cette logique dans une classe et de jouer le tri sera une ligne autonome ailleurs dans le code. Juste une question de préférence.
À propos, l'interface IList
Utilisation C # 3 et Linq aux objets, je créerais simplement une nouvelle liste au lieu d'essayer de trier l'existant:
void Example() { IList<string> codes; IList<ItemTp> itemTps; itemTps = codes.Select(code => itemTps.Single(itp => itp.Code == code)).ToList(); }