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

标签 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。

最佳答案

你必须连接列表

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

关于c# - 在 C# 中,是否可以循环遍历相同基类型的多个集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5797248/

相关文章:

c# - C# 中的复合数据类型

ios - 在 CollectionView 中自动选择中间单元格

java - 对集合(例如 HashSet)使用 Java 的 contains(Object) 方法而不实际拥有对象

.net - 有没有办法从 .NET 3.5 中提取 .NET 2.0?

c# - 单击 form2 上的按钮触发 form 1 中的方法

c# - 何时处置 CancellationTokenSource?

c# - 您如何处理用户偏好?

c# - 如何使用 LINQ 查找和删除集合中的重复对象?

c# - Request.UrlReferrer 对于 HTTPS 为 NULL

c# - 使用 win32 API 函数启用/禁用任务管理器,而不是通过 Windows 注册表