Cap*_*ard 4 c# collections asp.net-mvc
我遇到了一些非常奇怪的东西,我正在利用资源文件在工作项目中进行字符串翻译,目前我有一段代码,它遍历这些资源文件以查找有关问题和解答的本地化版本到FAQ页面,然后遍历它们并在页面上呈现它们.
麻烦的是,我的一个循环工作完美,但另一个只是直接跳到Answer2!
我的代码在下面,我真的无法理解为什么2条代码完全相同会产生不同的结果!
if (LanguageStrings.Culture == null)
{
LanguageStrings.Culture = new CultureInfo("en-gb");
LanguageStrings_FAQ.Culture = new CultureInfo("en-gb");
LanguageStrings_FAQAnswers.Culture = new CultureInfo("en-gb");
}
CultureInfo ResxCulture = new CultureInfo(LanguageStrings.Culture.Name);
List<string> FAQQuestions = new List<string>();
ResourceSet RS = LanguageStrings_FAQ.ResourceManager.GetResourceSet(ResxCulture, true, true);
foreach (DictionaryEntry entry in RS)
{
FAQQuestions.Add(entry.Value.ToString());
}
List<string> FAQAnswers = new List<string>();
ResourceSet RSAnswers = LanguageStrings_FAQAnswers.ResourceManager.GetResourceSet(ResxCulture, true, true);
foreach (DictionaryEntry entry in RSAnswers)
{
FAQAnswers.Add(entry.Value.ToString());
}
Run Code Online (Sandbox Code Playgroud)
RS中的第一项是0,它有一个问题0的键,正如我所期望的那样,但在第二个循环中,索引0是Answers2!
谁能给我一个指针,说明为什么会出现这种情况?
你得到集合的"错误"元素,因为它ResourceSet是无序的:
本
ResourceSet类枚举了一个IResourceReader,每加载名称和值,并将它们存储在一个Hashtable.
每当使用a时HashTable,迭代的顺序都是未指定的.如果您希望资源按特定顺序排列,则需要自行订购,例如,OrderBy通过某些属性申请.