首先,这是我的第一个 stackoverflow pull,所以如果我的解释很糟糕,我很抱歉。 所以我现在正在用 c# 开发游戏。它现在也确实有效,所以我正在寻找的解决方案不是必需的,但是我真的很想总结我的大部分代码。
代码如下:
我有一个名为 Item 的基类。
public class Item
{
string name;
//and more
}
从这个类我继承了多个不同的类 看起来像这样:
public class TestItem : Item
{
//stuff
}
public class AnotherItem: Item
{
//stuff
}
现在问题来了:
我的店铺目前看起来是这样的:
ShopInventory shopInventory;
foreach ((AnotherItem item,int price) in shopInventory.anotherItems)
{
//display item in a specific way
}
foreach ((TestItem item,int price) in shopInventory.testItems)
{
//display item in a specific way
}
//and so on
它在一个方法中所以我们不需要全局变量并且可以使用像“var”这样的东西,和 如您所见,它会自我复制。所以我知道我可以缩短它:
shopInventory.testItems
是一个看起来像这样的元组:
public class ShopInventory{
public List <Tuple<TestItem, int>>testItems = new List<Tuple<TestItem , int>>();
//and
public List <Tuple<AnotherItem, int>>anotherItems= new List<Tuple<AnotherItem , int>>();
//and more..
}
显示商品和价格。 现在我想创建这些列表的列表,这样我就可以将上面的大显示部分缩短为类似
foreach (var tempList in listOfLists )
{
foreach ((var item, int price) in tempList)
{
//display item in a specific way
}
}
我尝试过类似的东西
var listOfLists = new List<List<Tuple<Item,int>>>();
//or
var listOfLists = new List<List<Tuple<object,int>>>();
//and
var listOfLists = new List<List<Tuple<dynamic,int>>>();
但是如果我现在尝试添加一个列表:
listOfLists.Add(shopInventory.testItems);
添加行只是带有红色下划线。 但是,如果我创建类似的东西:
var listOfLists = new List<List<Tuple<AnotherItem,int>>>();
listOfLists.Add(shopInventory.anotherItems);
有效,但我显然只能将“AnotherItem”类型的对象存储到其中。 我还认为如果我使用基类 Item 我应该不会遇到任何问题但是.. 是的没有按计划工作。 如果您考虑“他为什么不直接将价格添加到物品本身”,那是因为物品本身也用于玩家库存中,因此不需要另一个代表其价格的变量。我可以创建另一个类,如 shopItem,但是如果我这样做,我将需要复制所有其他类并从它继承,我认为......使用元组会更有效率......而且我不需要再做 5 个脚本只是因为价格。
如果您有任何想法,请告诉我。我只是在编程方面“还行”,所以如果您有任何其他想法,我也很期待。