在c#中,是否可以循环遍历同一基类型的多个集合?

时间:2011-04-26 22:29:42

标签: c# collections .net-2.0

假设类'Apple','Banana'和'Orange'都继承自'Fruit'。

现在假设我们有成员变量列表 -

List<Apple> mApples; 

List<Banana> mBananas; 

List<Orange> mOranges;  

我们可以形成一个循环来执行与以下相同的操作吗?

foreach( Fruit fruit in mApples, mBananas, mOranges )  
{   
   fruit.Slice();   
}

我正在使用.net 2.0。

2 个答案:

答案 0 :(得分:4)

你必须连接列表

foreach(Fruit fruit in mApples.Cast<Fruit>()
        .Concat(mBananas.Cast<Fruit>())
        .Concat(mOranges.Cast<Fruit>()))
{
    fruit.Slice();
}

修改

这将是一个可能的2.0解决方案

    foreach(Fruit fruit in Concat<Fruit>(mApples, mBananas, mOranges))
    {
        fruit.Slice();
    }

    public static IEnumerable<T> Concat<T>(params IEnumerable<T>[] arr)
    {
        foreach (IEnumerable col in arr)
        foreach (T item in col)
            yield return item;
    }

答案 1 :(得分:3)

ArrayList list = new ArrayList();
list.AddRange( mApples );
list.AddRange( mBananas );
list.AddRange( mOranges );

foreach( Fruit item in list )
{
    item.Slice();
}