C#.NETCollectionsLINQTutoriel

Collections C# : tableaux, listes et dictionnaires

Découvrez les tableaux, List<T>, Dictionary<TKey,TValue> et les premières opérations LINQ pour stocker et manipuler des collections en C#.

Yva Hajatiana
15 octobre 2017
3 min de lecture
Partager :X / TwitterLinkedIn
Tableaux listes dictionnaires et LINQ en C#

Une variable stocke une valeur ; une collection en regroupe plusieurs. C# propose différentes structures selon que la taille est fixe, dynamique ou que chaque valeur doit être retrouvée par une clé.

Tableau : une taille fixe

int[] temperatures = [12, 18, 22, 25, 19];

Console.WriteLine(temperatures[0]);
Console.WriteLine(temperatures.Length);

Le premier index est 0 et le dernier Length - 1. Une fois créé, le tableau ne change pas de taille.

for (int i = 0; i < temperatures.Length; i++)
{
    Console.WriteLine($"Jour {i + 1} : {temperatures[i]} °C");
}

List<T> : une taille dynamique

List<string> courses = ["Pommes", "Pain", "Lait"];

courses.Add("Œufs");
courses.Remove("Pain");

foreach (string article in courses)
{
    Console.WriteLine(article);
}

Une liste peut grandir et rétrécir. Count donne son nombre d’éléments, tandis qu’un tableau utilise Length.

Dictionary<TKey, TValue> : accéder par clé

Dictionary<string, decimal> prix = new()
{
    ["Pomme"] = 2.50m,
    ["Banane"] = 1.80m
};

prix["Mangue"] = 4.50m;

Pour lire une clé qui peut être absente, préférez TryGetValue :

if (prix.TryGetValue("Banane", out decimal prixBanane))
{
    Console.WriteLine($"Prix : {prixBanane:C2}");
}

Un accès direct avec prix["Inconnu"] provoquerait une KeyNotFoundException.

Interroger une collection avec LINQ

LINQ permet d’exprimer un filtre, un tri ou une transformation :

List<int> nombres = [3, 7, 2, 9, 4, 11, 6];

List<int> pairsTries = nombres
    .Where(n => n % 2 == 0)
    .OrderBy(n => n)
    .ToList();

double moyenne = nombres.Average();

Les opérateurs essentiels sont :

OpérateurRôle
Wherefiltrer
Selecttransformer
OrderBytrier
Anyvérifier qu’au moins un élément correspond
Sum, Average, Min, Maxagréger

Beaucoup de requêtes LINQ utilisent l’exécution différée : elles ne parcourent réellement la source qu’au moment de l’énumération. ToList() matérialise immédiatement le résultat.

Choisir la collection

BesoinStructure
taille connue et fixetableau T[]
ajouts et suppressions fréquents en fin de séquenceList<T>
recherche d’une valeur par clé uniqueDictionary<TKey, TValue>

Erreurs fréquentes

  • dépasser le dernier index d’un tableau ;
  • confondre Length et Count ;
  • lire une clé inconnue sans TryGetValue ;
  • modifier une liste pendant un foreach ;
  • enchaîner plusieurs énumérations LINQ coûteuses sans matérialiser le résultat.

Épisode précédent : les boucles en C#. Épisode suivant : créer des méthodes en C#.

Mots-clés :C#.NETCollectionsLINQTutoriel
Y

Yva Hajatiana

Articles techniques sur l'ingénierie logicielle, .NET, le cloud et l'intelligence artificielle appliquée aux applications.