Spring.net добавить вопрос порядка словаря? - PullRequest
2 голосов
/ 10 сентября 2011

Я использую 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 Ответ

1 голос
/ 10 сентября 2011

Любой «порядок», равный 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". (Большинство «специализированных» коллекций очень не радуют.)

Счастливого кодирования.

...