Dieser C # / WPF-Code:
%Vor%gibt mir den Fehler :
Die beste überladene Methodenübereinstimmung für 'System.Collections.Generic.Dictionary.Dictionary (System.Collections.Generic.IDictionary)' hat einige ungültige Argumente
Dennoch finde ich dieses Codebeispiel überall wie hier und hier .
Wie kann ich ein Dictionary definieren, dessen Schlüssel case-insensitiv sind?
Sie versuchen, StringComparison
zu verwenden, was eine Aufzählung ist. Sie sollten stattdessen StringComparer.InvariantCultureIgnoreCase
verwenden - das ist eine Eigenschaft, die ein StringComparer
, das IEqualityComparer<string>
. Sie rufen dann die Dictionary<,>
-Konstruktorüberladung auf, die ein% co_de akzeptiert % , die es verwenden kann, um auf Gleichheit zu prüfen und Hash-Codes zu generieren.
Übergeben Sie StringComparer.InvariantCultureIgnoreCase. Hinweis StringCompar er nicht StringCompar ison .
Allgemein kann der Konstruktor Dictionary<TKey, TValue>
ein Argument vom Typ IComparer<TKey>
annehmen. Wie Jon bemerkt, ist StringComparison ein Enum. Aber StringComparer bietet einige "vordefinierte" Implementierung von IComparer<string>
, und es ist die letztere, die Sie brauchen.
Tags und Links c# dictionary case-insensitive