Foreach项目i在列表集合中

时间:2015-02-20 03:46:37

标签: c# linq list

是否有一种优雅的方式:

foreach(item i in ListItems1)
do ...
foreach(item i in ListItems2)
do ...
foreach(item i in ListItems2)
do ...
...

在C#中的单个foreach(使用Linq我猜?)中,这不会影响性能(特别是内存方面)?

3 个答案:

答案 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();
}

这可以通过你想要迭代的列表数组来改进,但正如我之前所说,我不推荐这种方法,因为我猜测它比原始方法差得多。