2010-07-24 5 views
4

Je dois assembler une liste de listes, mais l'idée ne semble pas trop jolie. Il semble juste si lourd. existe-t-il un autre modèle pour la tenue d'une liste de listes?fait une liste de listes odeur mauvais, quelles sont mes autres options

mon premier est d'utiliser une arrayList d'Arraylist.

C#, .net-2

plus: alors nombre d'éléments à stocker est petit mais toujours changeant.

NOTE: Je été corrigée sur l'utilisation de ArrayLists sur cette question:

What's wrong with using an ArrayList in .net-2.0

+0

Jamais utilisateur ArrayList. – tster

+2

J'ai déjà vu ce commentaire. qu'est-ce qui ne va pas avec un arraylist – fishhead

+0

Manque de sécurité de type. – recursive

Répondre

6

Il n'y a rien de mal à List<List<T>> - SelectMany de LINQ peut être votre ami dans cette situation.

+1

Alors que le commentaire est valide (et obtient un +1), LINQ est uniquement disponible en version 3.5 et supérieure, mais l'OP est répertorié en version 2.0. –

+0

Il dit que c'est .Net 2.0. – DOK

+0

Vous pouvez utiliser LinqBridge (ou similaire) pour Linq to Objects dans .Net 2.0 – DaveShaw

1

Pas un problème du tout. Je l'ai déjà utilisé et c'était un ajustement pour ce dont j'avais besoin à l'époque. Le motif est une liste de listes. :)

1

Une liste de listes n'est pas, en soi, une mauvaise odeur. Si vos listes sont toutes de la même taille, vous pouvez utiliser un tableau 2D, par exemple. int[2,2], mais si les listes ont des longueurs différentes, alors une liste de listes est la bonne façon de procéder, à moins de coder formellement une classe pour un tableau 2D irrégulier.

+0

Vous pouvez également utiliser des tableaux dentelés en C# directement - pas besoin de "coder formellement une classe pour un tableau 2D irrégulier" - les tableaux dentelés sont déjà supportés en C# . –

2

Pourquoi ne pas utiliser des objets créés dans des classes personnalisées?

Par exemple, les clients peuvent avoir plusieurs adresses. Créez un objet Customer ayant une propriété Address. Ensuite, vous pouvez avoir une collection (array, ArrayList, etc) de clients, et chaque client peut avoir une collection d'adresses.

Cela correspond à de nombreux types d'informations, tels que les produits dans les catégories de produits, les employés dans les départements.

Il est plus facile de coder pour gérer la relation hiérarchique de cette façon.

2

vous pouvez mais il serait préférable de l'envelopper dans une classe avec des méthodes publiques bien définies.

1

Vous pouvez certainement le faire en utilisant des listes génériques ou la variante non générique, ArrayList.

List<List<string>> listOfLists = new List<List<string>>(); 
listOfLists.Add(new List<string>()); 
listOfLists.Add(new List<string>()); 

ArrayList stringListOfStringLists = new ArrayList(); 
stringListOfStringLists.Add(new ArrayList()); 
stringListOfStringLists.Add(new ArrayList()); 
+1

-1 pour mentionner que ArrayList est une option. Règle générale, n'utilisez jamais ArrayList. – tster

+3

Pourquoi pas? Quel est le problème avec ArrayList? –

+1

@John Kugelman - Le type de sécurité, de boxe et de déballage coûte, par exemple, la performance –

Questions connexes