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

本文关键字:三个 集合 循环 foreach 我的 为什么 | 更新日期: 2023-09-27 18:18:32

我遇到了一些非常奇怪的事情,我在一个工作项目中使用资源文件进行字符串翻译,目前我有一段代码,它遍历这些资源文件以找到与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());
}

RS中的第一项是0,正如我所期望的,它的键值是Questions0,但在第二个循环中索引0是Answers2!

谁能给我一个指针,为什么这种情况发生?

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

因为ResourceSet 无序:

你得到了集合的"错误"元素

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

当使用HashTable时,迭代顺序未指定。如果您希望您的资源以特定的顺序出现,您需要自己排序,例如,通过某些属性应用OrderBy