Méthode d'implémentation du dictionnaire multi-clés C#
La bibliothèque de classes de base (BCL) .NET ne dispose pas de dictionnaire multi-clés intégré, mais certaines options open source sont disponibles.
Utiliser des tuples comme clés
Une approche courante consiste à utiliser des tuples comme clés. Cependant, cette méthode présente quelques inconvénients :
Structure de tuple personnalisée
Pour contourner ces limitations, vous pouvez définir une structure de tuple personnalisée :
<code class="language-csharp">public struct Tuple<T1, T2> { public readonly T1 Item1; public readonly T2 Item2; public Tuple(T1 item1, T2 item2) { Item1 = item1; Item2 = item2; } }</code>
Cela fournit l'immuabilité, des codes de hachage pré-calculés et des comparaisons d'égalité. La meilleure pratique consiste à placer les champs les plus distinctifs dans le premier élément.
La bibliothèque ValueUtils implémente un meilleur algorithme de hachage
La bibliothèque ValueUtils fournit une méthode FieldwiseHasher.Hash, qui peut créer un code de hachage plus fiable pour la structure et résout le problème de la mauvaise implémentation de GetHashCode pour les tuples.
Les objets à valeur nommée améliorent la lisibilité
ValueUtils permet également l'utilisation de champs nommés dans des clés multi-champs, améliorant ainsi la lisibilité du code :
<code class="language-csharp">sealed class MyValueObject : ValueObject<MyValueObject> { public DayOfWeek day; public string NamedPart; }</code>
Avec cette approche, les données avec une sémantique de valeur peuvent avoir à la fois des membres nommés et des codes de hachage corrects jusqu'à ce que la prise en charge native des tuples nommés avec de bons codes de hachage soit implémentée dans une future version C#.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!