为什么我的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!
谁能给我一个指针,为什么这种情况发生?
因为ResourceSet
无序:
ResourceSet
类枚举IResourceReader
,加载每个名称和值,并将它们存储在Hashtable
中。
当使用HashTable
时,迭代顺序未指定。如果您希望您的资源以特定的顺序出现,您需要自己排序,例如,通过某些属性应用OrderBy
。