Warum kann ich kein case-insensitives Dictionary in C # definieren?

8

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?

    
Edward Tanguay 22.03.2010, 10:31
quelle

4 Antworten

20

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.

    
Jon Skeet 22.03.2010, 10:33
quelle
8

Ändern

%Vor%

bis

%Vor%     
Henk Holterman 22.03.2010 10:34
quelle
3

Ü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.

    
itowlson 22.03.2010 10:33
quelle
1

Dies funktioniert auf meinem Computer:

%Vor%     
TcKs 22.03.2010 10:35
quelle

Tags und Links