c#奇怪的字典包含skey或StringComaprer

c#奇怪的字典包含skey或StringComaprer,c#,string,dictionary,containskey,stringcomparer,C#,String,Dictionary,Containskey,Stringcomparer,这是一种奇怪的魔法,ContainsKey返回false。我尝试使用不变量文化比较器,得到了相同的结果 GameCommands = new Dictionary<string, GameCommand>(StringComparer.Ordinal) { {"Start new game with deck", StartGame}, {"​Tell color", TellColor},

这是一种奇怪的魔法,ContainsKey返回false。我尝试使用不变量文化比较器,得到了相同的结果

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"));
GameCommands=新字典(StringComparer.Ordinal)
{
{“用甲板开始新游戏”,StartGame},
{"​告诉颜色“,TellColor},
{"​告诉rank“,TellRank},
{"​投递卡“,投递},
{"​玩扑克牌,玩},
};
Debug.WriteLine(GameCommands.ContainsKey(“告诉颜色”));
False


我通过删除键中的引号并再次键入来解决这个问题。我想知道为什么会发生这种情况。

在某些字符串的开头有零宽度空格(U+200B)。例如,复制以下内容:

{"​Drop card", Drop},
进入,你会看到这样的东西:

现在,我们不知道该字符来自何处,但我怀疑您是从其他地方复制和粘贴文本的

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

{"\u200BDrop card", Drop},

{“\u2008Drop card”,Drop},
--->
{“\u200BDrop card”,Drop},
查看您的table@FelixCastor:啊!谢谢,修好了。