Que sont les collections génériques en C #?

J’essaie de construire ma première liste générique et j’ai rencontré quelques problèmes. Je comprends que la déclaration ressemble à ” List ” et que j’ai using System.Collections.Generic; en haut de ma page. Toutefois, Visual Studio ne reconnaît pas la variable T

Qu’est-ce que je rate?

List signifie List . Donc par exemple:

Si j’ai un groupe d’employés et que je voulais une collection d’employés, je pourrais dire:

 List employeeList = new List(); 

Je pourrais ensuite append des objects Employee à cette liste, et le définir en respectant le type et l’étendre au nombre d’objects Employé que je mettrais dans celle-ci.

Ainsi:

 Employee emp1 = new Employee(); Employee emp2 = new Employee(); employeeList.Add(emp1); employeeList.Add(emp2); 

employeeList contient maintenant emp1 et emp2 tant qu’objects.

Les collections génériques ont plusieurs facettes, la plus importante étant qu’elles fournissent un moyen indépendant d’obtenir une collection bien. Ils sont typescripts; ce qui signifie que toute collection sera composée d’un seul type d’object. Vous ne disposerez pas d’une instance Animal dans List (à moins que, bien sûr, Employee ne soit une classe de base dont Animal hérite. À ce stade, toutefois, vous avez de plus gros problèmes.

La programmation avec des génériques est son propre sujet, digne d’au moins un chapitre dans un livre. À un très haut niveau, la programmation avec des génériques fournit un autre moyen de réutiliser le code, indépendamment de toute hiérarchie de classe ou des détails d’implémentation d’une classe spécifique.

Plus d’informations ici .

Vous devez substituer T à un autre type tel que int , ssortingng ou une classe de votre création:

 List values = new List(); values.Add(1); values.Add(2); int secondNumber = values[1]; // Yay! No casting or boxing required! 

Par exemple, si vous vouliez une liste générique d’entiers ( int ), vous écririez:

 List list = new List(); 

T est un paramètre de type qui, dans votre code, devrait être un type réel.

Ce qui rend une “liste générique” générique est le fait que vous pouvez utiliser la même classe pour créer une liste de pommes et une liste de pommes de terre. Bien sûr, une fois que vous avez créé une liste avec le new opérateur, vous devez choisir les objects que vous souhaitez stocker et communiquer votre décision en mettant le nom du type des objects que vous stockez dans <> .

La ligne suivante indique en fait au compilateur:

 List employeeList = new List(); 

“Hé, j’ai besoin d’une liste capable de gérer des objects de type Employee ; elle s’appelle employeeList !”

L’object de liste que vous obtenez de cette façon n’est plus générique. Il acceptera et renverra uniquement les objects de type Employee . Mais le comportement de la liste est défini de manière “générique” sans se soucier des objects avec lesquels elle travaille. Il les appelle simplement ‘ T ‘ en interne car, malgré tout ce que la liste est supposée faire, le type de contenu n’a pas vraiment d’importance.

Considérons T comme un nom de variable. Vous devez spécifier sa valeur, c’est à dire. rendre la classe générique ‘spécifique’. Vous pouvez donc créer List , List ou List de tout ce que vous voulez.

Vous déclarez une liste d’objects Foo comme ceci:

 List fooList; 

Le nom du type est un espace réservé pour le type d’object “réel” que vous avez inséré dans la liste générique au moment de son instanciation.

Cet article sur MSDN devrait vous aider énormément.

Lorsque vous faites une List , assurez-vous que votre classe Object est publique. Dans les installations VS par défaut, les classes sont «internes», ce qui signifie que vous ne pouvez pas en dresser la liste car elles sont moins accessibles que la liste publique que vous déclarez.

Cela m’a euh … hier. Défauts stupides.

Essayez-vous d’utiliser la classe List ou essayez-vous de créer la vôtre? À quoi ressemble votre code en ce moment?