Spring.net注入字典顺序问题?

时间:2011-09-10 09:26:40

标签: c# dictionary spring.net inject

我使用spring.net按此顺序注入Dictionary<string,string>

<object id="dictLang" type="System.Collections.Generic.Dictionary&lt;string,string&gt;">
  <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,但我不知道如何注射。

1 个答案:

答案 0 :(得分:1)

Generic.Dictionary<K,V>的任何“排序”都是pfm并且不能依赖 - spring.net的注入导致了一个稍微不同的密钥迭代顺序(也许是似乎一个) 待排序)只是运气而不能依赖

请注意,注入的字典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相同的密钥迭代次序,也可能有其他因素在起作用,例如“temp”的default capacity不同。

然而,我无法回答“OrderedDictionary”部分。 (大多数“专业”收藏品都没有给人留下深刻印象。)

快乐的编码。