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 здесь, и вы увидите что-то вроде этого:
Мы не знаем, откуда появился этот персонаж, но я подозреваю, что вы копировали и вставляли текст откуда-то еще.
Обратите внимание, что нет ничего плохого в поведении словаря или string
или что-нибудь в.NET здесь... это просто проблема в вашем исходном коде. Вы бы увидели точно такое же поведение, если бы вы выразили ту же строку более четко:
{"\u200BDrop card", Drop},