Si j'ai un Dictionary<String,...>
est-il possible de faire des méthodes comme la ContainsKey
casse insensible?
Cela semblait lié, mais je ne l'ai pas bien compris: c # Dictionary: rendre la clé insensible à la casse grâce aux déclarations
c#
collections
generic-collections
Monsieur Boy
la source
la source
StringComparer.InvariantCultureIgnoreCase
? Il fait ce qu'il dit ...Réponses:
C'est en effet lié. La solution est de dire à l'instance de dictionnaire de ne pas utiliser la méthode standard de comparaison de chaînes (qui est sensible à la casse) mais plutôt d'utiliser une méthode insensible à la casse. Cela se fait en utilisant le constructeur approprié :
Le constructeur attend un
IEqualityComparer
qui indique au dictionnaire comment comparer les clés.StringComparer.InvariantCultureIgnoreCase
vous donne uneIEqualityComparer
instance qui compare les chaînes de manière insensible à la casse.la source
la source
Il y a peu de chances que votre affaire avec un dictionnaire qui est extrait d'une DLL tierce ou externe. Utilisation de linq
YourDictionary.Any(i => i.KeyName.ToLower().Contains("yourstring")))
la source
Any
en,SingleOrDefault
vous ne reviendrez pasnull
s'il n'existe pas, vous obtiendrez à la place une paire de valeurs clés avec la clé et la valeur définies surnull
!Contains
Cela semble être un cas d'utilisation très spécifique à quelque chose sur lequel vous travailliez à l'époque. En tant que réponse utile plus générique, je pense queEquals
c'est mieux. Et sur cette même note, au lieu de dupliquer une chaîne avecToLower()
, il serait encore mieux de l'utiliserStringComparison.xxxCase
.dict.Keys.Contains("bla", appropriate comparer)
surcharge LINQ pour faciliter l'utilisation.Je viens de rencontrer le même genre de problème où j'avais besoin d'un dictionnaire sensible à la casse dans un contrôleur ASP.NET Core.
J'ai écrit une méthode d'extension qui fait l'affaire. Peut-être que cela peut également être utile pour les autres ...
Pour utiliser la méthode d'extension:
Ensuite, récupérez une valeur du dictionnaire avec:
la source
Si vous n'avez aucun contrôle sur la création de l'instance, disons que votre objet est déstérilisé de json, etc., vous pouvez créer une classe wrapper qui hérite de la classe de dictionnaire.
la source