Derniers tips / Mémos
Modélise nativement « exactement l'un de ces types », avec un switch exhaustif vérifié par le compilateur.
Fin des state machines générées par le compilateur : moins d'allocations et des stack traces enfin lisibles.
Recherche sémantique directement dans SQL Server 2025, sans base vectorielle séparée, en LINQ typé.
Framework UI cross-platform pour .NET : Windows, macOS, Linux, iOS, Android et WebAssembly.
Découvrez les nouvelles APIs asynchrones pour la compression ZIP et les améliorations de performance dans .NET 10
Collections C# : guide des interfaces et implémentations
Panorama des collections en C# : interfaces, implémentations et cas d'usage pour choisir la bonne structure de données.
Sommaire
IEnumerable<T>
Contrat minimal d'itération en lecture. Idéal pour exposer un flux d'éléments et l'exécution différée (LINQ).
Avantages
- Faible empreinte mémoire
- Simple et universel
- Supporte l'exécution différée
Inconvénients
- Pas de Count ni d'index
- Pas d'accès aléatoire
- Souvent single-pass sauf matérialisation
ICollection<T>
Étend IEnumerable avec Count, Add, Remove, Contains, Clear. Usage : collections modifiables exposées ou internes.
Avantages
- API d'écriture standard (Add/Remove)
- Accès au Count
Inconvénients
- Pas d'indexation garantie
- Performances dépendant de l'implémentation
IReadOnlyCollection<T>
Expose le nombre d'éléments (Count) sans autoriser la modification. Usage : sorties d'API.
Avantages
- Communique clairement l'intention de lecture seule
- Facile à exposer depuis des collections existantes
Inconvénients
- Ne protège pas l'instance sous-jacente d'éventuelles mutations
- Limité aux opérations de lecture
IList<T>
Collection indexée (this[int index]). Usage : accès aléatoire et opérations par index.
Avantages
- Accès O(1) par index sur List<T>
- Insertion/suppression par position
Inconvénients
- Exposition de la mutabilité
- Certaines implémentations n'ont pas d'accès O(1)
IReadOnlyList<T>
Liste en lecture seule avec accès indexé. Usage : exposer une liste ordonnée sans modification.
Avantages
- Accès indexé garanti en lecture
- Intention claire pour les API
Inconvénients
- La collection sous-jacente peut rester modifiable
- Pas d'opérations d'écriture
ISet<T>
Ensemble d'éléments uniques. Usage : déduplication et vérification d'appartenance.
Avantages
- Lookup rapide
- Garantit l'unicité des éléments
Inconvénients
- Ordre non garanti
- Dépend du comparer/égalité pour le comportement
Résumé
IEnumerable<T>: lecture seule, itération simpleIReadOnlyCollection<T>: lecture seule + CountIReadOnlyList<T>: lecture seule + indexICollection<T>: lecture/écriture + opérationsIList<T>: indexé, ordre importantISet<T>: unicité, opérations ensemblistes
Astuces
- Exposez le type le plus restrictif possible
- Privilégiez IReadOnly* en sortie
- Acceptez IEnumerable en entrée si suffisant
- N'exposez pas List<T> brute dans une API publique