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},
这是某种奇怪的魔法,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},