创建元组列表列表

问题描述 投票:0回答:0

首先,这是我的第一个 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 个脚本只是因为价格。

如果您有任何想法,请告诉我。我只是在编程方面“还行”,所以如果您有任何其他想法,我也很期待。

c# list unity3d tuples game-development
© www.soinside.com 2019 - 2024. All rights reserved.