c# - spring.net注入(inject)字典顺序问题?

标签 c# dictionary spring.net inject

我使用 spring.net 注入(inject)一个 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=中文

我发现它是按键排序的, 我怎样才能保持注入(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/

相关文章:

c# - 是否有任何库/框架用于撤消/重做数据库中行的更改?

c# - 转换为十进制并执行 OrderBy

c# - 为什么我在调用 ContextRegistry.GetContext() 时收到 Spring.NET 引发的异常?

spring.net - 如何在外部 Spring.NET 配置文件中指定 typeAliases 和对象

c# - 在 `using` 语句中内联创建的所有对象都将被释放吗?

c# - 当子元素具有焦点 UWP 时选择 ListViewItem

Python反向字典项目顺序

dictionary - Julia 中 Dict 和 Base.Iterators.Pairs 的区别

Python 值错误 : chr() arg not in range(256)

c# - 如何使用 Autofac 使用方法连接事件?