2

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

<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,但我不知道如何注入。

4

1 回答 1

1

任何“排序”Generic.Dictionary<K,V>都是由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”部分。(大多数“专业”系列都非常平庸。)

快乐编码。

于 2011-09-10T09:41:13.150 回答