繁体   English   中英

Dictionary.ContainsKey甚至认为密钥存在时返回false

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM