[英]Dictionary.ContainsKey return false even thought the key exists
我有一段代码如下:
IDictionary<string, string> dictionary = new Dictionary<string, string>(){
{ "de-DE", "German"},
{ "en‐GB", "English"},
{ "en‐US", "English"},
{ "es‐ES", "Spanish"},
{ "es‐MX", "Spanish"},
{ "fr‐CA", "French"},
{ "fr‐FR", "French"},
{ "hu‐HU", "Hungarian"},
{ "pl‐PL", "Polish"},
{ "pt‐PT", "Portuguese"},
{ "nl‐NL", "Dutch"},
{ "nb‐NO", "Norwegian"},
{ "sv‐SE", "Swedish"},
{ "it‐IT", "Italian"},
};
bool check = dictionary.ContainsKey("en-US");
Console.WriteLine(check);
check
返回false
。 有人可以帮忙解释一下吗?
你的破折号不一样。 看看Notepad ++中的文本是什么样的(当你需要调试像这样的字符相关的东西时很有用):
与实际更换您的破折号后-
按预期工作的代码 。
编辑
谢谢,@斯科特张伯伦为。 净小提琴突出了人物的差异 。
正如已经指出你的破折号不一样 。 我已经在你的Dictionary
中添加了另一个项目,它给你预期的结果并比较基础IL ,由Ildasm
知道差异:
{ "en‐US", "English"},
{ "en-US", "English2"},
和:
IL_002d: nop
IL_002e: dup
IL_002f: ldstr bytearray (65 00 6E 00 10 20 55 00 53 00 ) // e.n.. U.S.
IL_0034: ldstr "English"
IL_0039: callvirt instance void class [mscorlib]System.Collections.Generic.Dictionary`2<string,string>::Add(!0,
!1)
IL_003e: nop
IL_003f: dup
IL_0040: ldstr "en-US"
IL_0045: ldstr "English2"
IL_004a: callvirt instance void class [mscorlib]System.Collections.Generic.Dictionary`2<string,string>::Add(!0,
!1)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.