我使用 spring.net 注入(inject)一个 Dictionary<string,string>
按此顺序:
<object id="dictLang" type="System.Collections.Generic.Dictionary<string,string>">
<constructor-arg>
<dictionary key-type="string" value-type="string" merge="0">
<entry key="zh-CN" value="中文" />
<entry key="en-US" value="英文" />
<entry key="th-TH" value="泰文" />
</dictionary>
</constructor-arg>
</object>
当我使用 foreach 对其进行迭代时,它输出如下:
code=en-US,name=英文
code=th-TH,name=泰文
code=zh-CN,name=中文
我发现它是按键排序的, 我怎样才能保持注入(inject)时的顺序?
当我手动创建字典时:
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("zh-CN", "中文");
dic.Add("en-US", "英文");
dic.Add("th-TH", "泰文");
当我重复它时,它是相同的顺序,这很奇怪!
我考虑过使用 OrderedDictionary
, 但我不知道如何注入(inject)。
最佳答案
Generic.Dictionary<K,V>
的任何“排序”由 pfm 提供并且不能依赖 -- spring.net 的注入(inject)导致略微不同的键迭代顺序(也许 似乎 被排序的顺序)只是运气,不能依赖.
注意注入(inject)的字典was passed an IDictionary itself作为构造函数参数,使其与手动代码不同。比较它:
Dictionary<string, string> temp = new Dictionary<string, string>();
temp.Add("zh-CN", "中文");
temp.Add("en-US", "英文");
temp.Add("th-TH", "泰文");
Dictionary<string, string> dic = new Dictionary<string, string>(temp);
即使上面没有产生与 spring.net 相同的 key 迭代顺序,也可能有其他因素在起作用,例如不同的 default capacity。对于“温度”。
但是,我无法回答“OrderedDictionary”部分。 (大多数“专业”收藏品都非常平庸。)
快乐编码。
关于c# - spring.net注入(inject)字典顺序问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7370823/