Wenn ich eine habe, Dictionary<String,...>
ist es möglich, Methoden wie ContainsKey
Groß- und Kleinschreibung nicht zu berücksichtigen?
Dies schien verwandt zu sein, aber ich habe es nicht richtig verstanden: c # Dictionary: Den Schlüssel durch Deklarationen unabhängig von Groß- und Kleinschreibung machen
c#
collections
generic-collections
Mr. Boy
quelle
quelle
StringComparer.InvariantCultureIgnoreCase
? Es macht was es sagt ...Antworten:
Es ist in der Tat verwandt. Die Lösung besteht darin, die Wörterbuchinstanz anzuweisen, nicht die Standardmethode zum Vergleichen von Zeichenfolgen zu verwenden (bei der zwischen Groß- und Kleinschreibung unterschieden wird), sondern eine Methode, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird. Dies erfolgt mit dem entsprechenden Konstruktor :
Der Konstruktor erwartet eine,
IEqualityComparer
die dem Wörterbuch mitteilt, wie Schlüssel verglichen werden sollen.StringComparer.InvariantCultureIgnoreCase
gibt Ihnen eineIEqualityComparer
Instanz, die Zeichenfolgen ohne Berücksichtigung der Groß- und Kleinschreibung vergleicht.quelle
quelle
Es gibt nur wenige Möglichkeiten, wo Sie sich mit Wörterbüchern befassen, die von Drittanbietern oder externen DLLs abgerufen werden. Mit linq
YourDictionary.Any(i => i.KeyName.ToLower().Contains("yourstring")))
quelle
Any
, werdenSingleOrDefault
Sie nichtnull
zurückkommen, wenn es nicht existiert. Stattdessen erhalten Sie ein Schlüsselwertpaar, bei dem sowohl Schlüssel als auch Wert auf gesetzt sindnull
!Contains
Scheint ein sehr spezifischer Anwendungsfall für etwas zu sein, an dem Sie zu der Zeit gearbeitet haben. Als allgemeinere hilfreiche Antwort halte ich es fürEquals
besser. In diesem Sinne istToLower()
es sogar noch besser, eine Zeichenfolge mit zu duplizierenStringComparison.xxxCase
.dict.Keys.Contains("bla", appropriate comparer)
für die Teilübereinstimmung ) die LINQ-Überladung , um die Verwendung zu vereinfachen.Ich hatte gerade die gleichen Probleme, bei denen ich ein Wörterbuch ohne Berücksichtigung der Groß- und Kleinschreibung in einem ASP.NET Core-Controller benötigte.
Ich habe eine Erweiterungsmethode geschrieben, die den Trick macht. Vielleicht kann dies auch für andere hilfreich sein ...
So verwenden Sie die Erweiterungsmethode:
Dann holen Sie sich einen Wert aus dem Wörterbuch mit:
quelle
Wenn Sie bei der Instanzerstellung keine Kontrolle haben, beispielsweise wenn Ihr Objekt von JSON usw. desterilisiert ist, können Sie eine Wrapper-Klasse erstellen, die von der Dictionary-Klasse erbt.
quelle