2

私は 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たのですが、注入の仕方がわかりません。

4

1 に答える 1

1

の「順序付け」はpfmGeneric.Dictionary<K,V>によるものであり、信頼することはできません。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 に答える