首页 > 解决方案 > 如何转换嵌套的泛型类型?

问题描述

首先,我使用的是 Unity,它不支持任何最新功能,例如IEnumerables 的除外Cast

我有一个抽象类Item和另一个类Swordand Hammer,它们都继承自Item. 我也有一个 struct ItemHolder

public struct ItemHolder<ItemType> where ItemType : Item {
    public ItemType Item {get; set;}
}

我有两个列表List<ItemHolder<Sword>> swordList和其他列表,List<ItemHolder<Hammer>> hammerList并希望生成一个类型列表List<ItemHolder<Item>>,其中包含转换为的其他列表的所有元素ItemHolder<Item>

我试过这个代码片段:

public List<ItemHolder<Item>> GetAllItems() {
    List<ItemHolder<Item>> allItems = new List<ItemHolder<Item>>();

    List<ItemHolder<Item>> swordItemList = 
        CastListElementsToType<ItemHolder<Sword>, ItemHolder<Item>>(swordList);
    
    //do the same thing for the hammers and add all elements to allItems.

    return allItems;
}

private List<To> CastListElementsToType<From, To>(List<From> list) where From : To {
    List<To> result = new List<To>();

    foreach (From element in list) {
        result.Add((To) element);
    }

    return result;
}

ItemHolder<Sword>但它告诉我,从到没有可用的拳击转换ItemHolder<Item>

有什么办法可以解决这个问题还是我需要一个全新的方法?

标签: c#genericsboxing

解决方案


推荐阅读