C# странный словарь ContainsKey или StringComaprer

Это какая-то странная магия, ContainsKey возвращает false. Я попытался использовать Сравнитель InvariantCulture с тем же результатом.

GameCommands = new Dictionary<string, GameCommand>(StringComparer.Ordinal)
            {
                {"Start new game with deck", StartGame},
                {"​Tell color", TellColor},
                {"​Tell rank", TellRank},
                {"​Drop card", Drop},
                {"​Play card", Play},
            };
Debug.WriteLine(GameCommands.ContainsKey("Tell color"));

Ложь

Я решаю это, удаляя кавычки в ключах и вводя их снова. Я хочу знать, почему это происходит.

1 ответ

Решение

У вас есть пробелы нулевой ширины (U+200B) в начале некоторых ваших строк. Например, скопируйте это:

{"​Drop card", Drop},

в Unicode Explorer здесь, и вы увидите что-то вроде этого:

Unicode Explorer

Мы не знаем, откуда появился этот персонаж, но я подозреваю, что вы копировали и вставляли текст откуда-то еще.

Обратите внимание, что нет ничего плохого в поведении словаря или string или что-нибудь в.NET здесь... это просто проблема в вашем исходном коде. Вы бы увидели точно такое же поведение, если бы вы выразили ту же строку более четко:

{"\u200BDrop card", Drop},
Другие вопросы по тегам