是否有一种优雅的方式:
foreach(item i in ListItems1)
do ...
foreach(item i in ListItems2)
do ...
foreach(item i in ListItems2)
do ...
...
在C#中的单个foreach(使用Linq我猜?)中,这不会影响性能(特别是内存方面)?
答案 0 :(得分:5)
管理此问题的最佳方法是将其分解为您调用3次的函数:
public void ProcessList(List<myListType> theList)
{
//Do some cool stuff here...
}
但是,你是否获得了很多可维护性的好处。如果您不想增加内存使用量,那么这可能是使您的代码更好的最佳重构。除非你的名单很大,否则记忆差异可能无论如何都可以忽略不计。
答案 1 :(得分:1)
你可以随时
foreach (item i in ListItems1.Concat(ListItems2).Concat(ListItems3))
{
// do things
}
还有删除重复项目的类似.Union()
。但是,由于它正在删除重复项,因此性能较差。
答案 2 :(得分:0)
为了回答你的问题并且有点创意,这里在技术上&#34;会工作,但我不建议使用它。
int listItemTotalItemCount = ListItems1.Count() + ListItems2.Count() + ListItems3.Count();
for(int i = 0; i < listItemTotalItemCount; i++)
{
int listIndex = i;
object retrievedItem;
if(listIndex >= ListItems1.Count())
{
if (i - ListItems1.Count() >= ListItems2.Count())
{
retrievedItem = ListItems3[i - ListItems1.Count()- ListItems2.Count() ];
}
else
{
retrievedItem = ListItems2[i - ListItems1.Count()];
}
}
else
{
retrievedItem = ListItems1[listIndex];
}
retrievedItem.DoSomethingSpecial();
}
这可以通过你想要迭代的列表数组来改进,但正如我之前所说,我不推荐这种方法,因为我猜测它比原始方法差得多。