在 C# 中,是否可以循环访问相同基类型的多个集合?

发布于 2024-11-03 08:58:14 字数 355 浏览 1 评论 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。

Suppose classes 'Apple', 'Banana' and 'Orange' all inherit from 'Fruit'.

Now suppose we have member variable lists -

List<Apple> mApples; 

List<Banana> mBananas; 

List<Orange> mOranges;  

Can we form a loop that does something equivalent to the following?

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

I'm using .net 2.0.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月隐月明月朦胧 2024-11-10 08:58:14

您必须连接列表

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;
    }

You would have to concatenate the lists

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

Edit

This would be a possible 2.0 solution

    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;
    }
赠我空喜 2024-11-10 08:58:14
ArrayList list = new ArrayList();
list.AddRange( mApples );
list.AddRange( mBananas );
list.AddRange( mOranges );

foreach( Fruit item in list )
{
    item.Slice();
}
ArrayList list = new ArrayList();
list.AddRange( mApples );
list.AddRange( mBananas );
list.AddRange( mOranges );

foreach( Fruit item in list )
{
    item.Slice();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文