【问题标题】:Storing a instance/object in a array将实例/对象存储在数组中
【发布时间】:2019-11-03 18:51:02
【问题描述】:

我正在创建一个控制台僵尸生存游戏,假设是随机的并且相当复杂,例如寻找多种武器和弹药类型。但是,我相信我可以将一个对象保存在数组中以便以后再次使用它,以获得正确的信息,但是这种方式不起作用。

我尝试过将对象存储在数组中,但没有成功。我试图将数组从基于项目更改为基于对象,但没有成功。

class Firearm : Weapon
    {
        public Firemode firemode;
        public int maxCapacity;
        public int curCapacity;
        public Type type;
        public Caliber caliber;

        public Firearm (string _name, float _damage, int _range, Firemode 
_firemode, int _maxCapacity, int _curCapacity, Type _type, Caliber 
_caliber)
        {
            name = _name;
            damage = _damage;
            range = _range;
            firemode = _firemode;
            maxCapacity = _maxCapacity;
            curCapacity = _curCapacity;
            type = _type;
            caliber = _caliber;
        }

        public void FirearmStats()
        {
            Console.WriteLine("\n Name: {0}\n Damage: {1}\n Range: {2}\n 
Firemode: {3}\n Max Capacity: {4}\n Current Capacity: {5}", name, damage, 
range, firemode, maxCapacity, curCapacity);
        }
    }


static void Main(string[] args)
    {
        Random numberGenerator = new Random();
        //Pistols
        Firearm m9 = new Firearm("Beretta M9A1", 34.0F, 30, 
Firemode.SemiAutomatic, 15, numberGenerator.Next(1, 16), Type.Pistol, 
Caliber.nine);
        ....
        Item[] inventory = new Item[14];
        Item[] equipped = new Item[0];
        .....
        equipped[0] = m9;
        Console.WriteLine("\nYou find a {0}", equipped[0].name);

        //issue here with equipped[0]^^^
        equipped[0].FirearmStats();

        //and here ^^^^^
        player.Command();
    }

严重性代码描述项目文件行抑制状态 错误 CS1061“Program.Item”不包含“FirearmStats”的定义,并且找不到接受“Program.Item”类型的第一个参数的可访问扩展方法“FirearmStats”(您是否缺少 using 指令或程序集引用? ) ZombieConsoleGame E:\Visual Studio Projects\ZombieConsoleGame\ZombieConsoleGame\Program.cs 158 N/A

【问题讨论】:

    标签: c# arrays object instance-variables


    【解决方案1】:

    我假设 Weapon 类继承自您的 Item 类。

    由于数组equipped 的类型为Item,因此您需要将Item 转换为Weapon,然后才能调用任何方法/函数武器类。

    更改此行(您突出显示问题的位置)equipped[0].FirearmStats();

    成为:

    ((Firearm)equipped[0]).FirearmStats();
    

    这会将 Item 转换为 Firearm,然后允许您将其用作 Firearm。

    编辑:

    另外,一行:

    Item[] equipped = new Item[0];
    

    将创建一个包含零元素的数组变量,没有分配空间来存储您配备的项目。将[0] 中的零更改为正数,就像您在 inventory (Item[] inventory = new Item[14];) 的上一行中已有的一样

    【讨论】:

    • 旁注/nitpick:不是 Weapon 而是 FireArm 声明了 FirearmStats 方法 ;-)
    • 我认为这在看到它之后会起作用,但它没有。然后我想我应该把它改成火器。在我运行它之前,这消除了任何错误。在控制台中,它显示“未处理的异常:System.IndexOutOfRangeException:索引超出了数组的范围。在 E:\Visual Studio Projects\ZombieConsoleGame\ZombieConsoleGame\Program.cs 中的 ZombieConsoleGame.Program.Main(String[] args):第 157 行"。我还尝试将数组更改为武器或火器,但在运行它时在控制台中收到相同的错误消息。
    • @SubaruDanyBoon​​,请注意 IndexOutOfRangeException 告诉您的内容。不要只是盲目猜测问题,阅读异常给你的问题描述......
    • 我不知道它为什么这么说,它应该不在范围内,因为索引在数组大小的范围内。
    • @SubaruDanyBoon​​,实际数组大小是多少?
    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多