为什么我的foreach循环会自动跳转到集合中的第三个值?

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!

谁能给我一个指针,说明为什么会出现这种情况?

das*_*ght 9

你得到集合的"错误"元素,因为它ResourceSet无序的:

ResourceSet类枚举了一个IResourceReader,每加载名称和值,并将它们存储在一个Hashtable.

每当使用a时HashTable,迭代的顺序都是未指定的.如果您希望资源按特定顺序排列,则需要自行订购,例如,OrderBy通过某些属性申请.

  • 一个旧帖子 - 但要对ResourceSet进行排序读取... http://stackoverflow.com/questions/1700240/how-to-sort-resourceset-in-c-sharp (3认同)