我按照以下顺序使用spring.net注入一个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=中文我发现它是按钥匙订购的,我怎么才能维持我注射的顺序呢?
当我手动创建字典时:
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("zh-CN", "中文");
dic.Add("en-US", "英文");
dic.Add("th-TH", "泰文");这是相同的顺序,当我迭代它,这太奇怪了!
我考虑过使用OrderedDictionary,但我不知道如何注射。
发布于 2011-09-10 09:41:13
Generic.Dictionary的任何“排序”都是由pfm完成的,不能依赖-- Spring.net的注入导致了一个稍微不同的关键迭代顺序(可能是排序的),这只是运气,不能依赖。
注意,注入的字典被传递给一个IDictionary本身作为构造函数参数,使其与手动代码不完全相同。将其与以下方面进行比较:
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相同的关键迭代顺序,也有可能有其他因素在起作用,例如用于"temp“的不同缺省容量。
然而,我不能回答"OrderedDictionary“部分。(大多数“专门”藏品都很平淡无奇。)
编码愉快。
https://stackoverflow.com/questions/7370823
复制相似问题