我正在编写一个游戏,并且我有一个 Crate 类,其中包含 T 类型的 Item-s 因板条箱而异。我已经使用这样的泛型进行了设置:
public class Crate<I> : Item
where I : Item
{
private List<I> contents = new List<I>();
//...
}
我目前正在编写一个“购买”屏幕,您可以在其中选择物品,然后交付这些物品的板条箱。根据玩家在游戏中所处的阶段,某些物品可用/不可用。因此,我有一个数组中当前可用项目的列表。
我想要做的是基于该数组创建板条箱。
例如,我的数组可能是
public static List<Item> CurrentlyAvailableItems= new List<Item>() { new Linen(), new Food() };
从这里,我想创建按钮来生成这些物品的箱子。目前我能想到的唯一方法是使用一个巨大的 IF 循环,每次我创建这样的新项目时都需要更新它:
for (int i = 0; i < GV.CurrentlyAvailableItems.Count; i++)
{
Item item = null;
if (GV.CurrentlyAvailableItems[i] is Linen) item = new Crate<Linen>();
else if (GV.CurrentlyAvailableItems[i] is Food) item = new Crate<Food>();
Add(new BuyButton(item));
}
我想要做的是:
for (int i = 0; i < GV.CurrentlyAvailableItems.Count; i++)
{
Type t = GV.CurrentlyAvailableItems[i].GetType();
Crate<t> crate = new Crate<t>();
Add(new BuyButton(crateToBuy ));
}
这可能吗?