2011-09-10 62 views
2

我用spring.net順序注入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,但我不知道如何注入。

回答

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的,有可能是有在起作用的其他因素,如不同的default capacity爲「臨時」。

但是,我無法回答「OrderedDictionary」部分。 (大多數「專業」系列產品都非常不足)。

快樂編碼。