将实例/对象存储在数组中

时间:2019-06-20 22:29:01

标签: c# arrays object instance-variables

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

我尝试过将对象存储在没有运气的数组中。我试图将数组从基于项目的数组更改为没有运气的对象。

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'的定义,并且找不到可以接受的扩展方法'FirearmStats'接受类型为'Program.Item'的第一个参数(您是否缺少using指令或程序集引用? )ZombieConsoleGame E:\ Visual Studio Projects \ ZombieConsoleGame \ ZombieConsoleGame \ Program.cs 158不适用

1 个答案:

答案 0 :(得分:1)

我假设initState类继承自您的List类。

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

更改此行(突出显示问题的地方)equipped

成为:

Item

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

编辑:

此外,该行:

equipped[0].FirearmStats();

将创建一个其中包含零个元素的Array变量,没有分配空间来存储您配备的物品。将((Firearm)equipped[0]).FirearmStats(); 中的零更改为正数,就像您在库存Item[] equipped = new Item[0];

的上一行中一样