使用foreach循环遍历多个DictionaryEntry

4

我正在尝试使用3个已经存在的resx文件中的内容写入ListView。使用下面的循环只能使用一个文件,虽然效果接近但我需要使用同样的循环与多个DictionaryEntrys一起使用。我的目标是这样的..

ResXResourceReader rdr0 = new ResXResourceReader(textPath1.Text + ".resx");
ResXResourceReader rdr1 = new ResXResourceReader(textPath1.Text + ".es.resx");
ResXResourceReader rdr2 = new ResXResourceReader(textPath1.Text + ".fr.resx");

foreach ((DictionaryEntry d in rdr0) && (DictionaryEntry e in rdr1))
{
    string[] row = { d.Key.ToString(), d.Value.ToString(), e.Value.ToString() };
    var listViewItem = new ListViewItem(row);
    listResx.Items.Add(listViewItem);
}

你可以将它们合并为一个并进行迭代(请参阅zip答案),或者如果它们都是相等长度的,你可以循环遍历它们并从每个中获取正确的索引,最后一个会被视为“HACK!!!”。 - Thomas Lindvall
1个回答

8
< p > foreach 关键字无法做到这一点。

相反,您可以使用 LINQ 的 .Zip() 方法

foreach(var item in rdr0.Zip(rdr1, (d, e)
         => new [] { d.Key.ToString(), d.Value.ToString(), e.Value.ToString() }))

不错的解决方案。之前从未听说过 Zip。 - John Mc
收到错误信息...Resources.ResXResourceReader'不包含“Zip”的定义,也没有接受类型为'System.Resources.ResXResourceReader'的第一个参数的扩展方法“Zip”。.Zip方法是否与使用ResxResourceReaders的事实不一致? - rbelliv
@RobbyBelliveau:我忘记它们不是通用的。在两个集合中都添加.Cast<DictionaryEntry>() - SLaks
@JohnMc:这是 .Net 4.0 的新功能。 - SLaks
@RobbyBelliveau:.Cast() 返回一个 IEnumerable<T> - SLaks
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接