2016-03-24 8 views
2

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

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")); 

Ложные

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

ответ

3

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

{"​Drop card", Drop}, 

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

Unicode explorer

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

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

{"\u200BDrop card", Drop}, 
+0

'{ "\ u2008Drop карты", Drop}' ----> '{ "\ u200BDrop карты", Drop} , 'глядя на ваш стол –

+0

@FelixCastor: Doh! Спасибо, исправлено. –