c# weird Dictionary ContainsKey or StringComaprer 收藏

c# weird Dictionary ContainsKey or StringComaprer

这是某种奇怪的魔法,ContainsKey returns 错误。我尝试使用 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"));

我通过删除键中的引号并重新输入来解决它。我想知道为什么会这样。

您的某些字符串的开头有零宽度空格 (U+200B)。例如,复制这个:

{"​Drop card", Drop},

进入 Unicode Explorer here,您会看到类似这样的内容:

现在,我们不知道那个字符是从哪里来的,但我怀疑您是从其他地方复制和粘贴文本的。

请注意,字典的行为、string 或此处 .NET 中的任何内容都没有问题...只是 源代码中的问题代码。如果您更清楚地表达相同的字符串,您会看到完全相同的行为:

{"\u200BDrop card", Drop},