C#控制台RPG游戏:构造函数中数组值未赋值问题求助
问题原因与解决方案
你遇到的问题是只声明了数组变量,但没有初始化数组实例。C#中引用类型(包括数组)声明后默认是null,直接给索引赋值会因为没有指向实际的数组内存而报错,和访问修饰符无关。
修复代码的两种方式
方式一:在构造函数中先初始化数组再赋值
class Warrior { public string[] attacks, weapons, items; // Constructor public Warrior() { // 先为数组分配内存,这里设置长度为1(对应你要赋值的索引0) attacks = new string[1]; weapons = new string[1]; items = new string[1]; attacks[0] = "Basic Slash"; weapons[0] = "Basic Sword"; items[0] = "Basic Health Potion"; } }
方式二:声明时直接初始化数组
如果初始值固定,也可以在变量声明阶段直接完成初始化,这样构造函数里不需要额外赋值:
class Warrior { // 声明时直接初始化数组并赋值 public string[] attacks = new string[] { "Basic Slash" }; public string[] weapons = new string[] { "Basic Sword" }; public string[] items = new string[] { "Basic Health Potion" }; public Warrior() { // 无需额外操作 } }
补充说明
如果后续需要动态扩展数组元素数量,建议改用List<string>,它支持动态添加元素,比固定长度数组更灵活,示例:
class Warrior { public List<string> attacks = new List<string>(); public List<string> weapons = new List<string>(); public List<string> items = new List<string>(); public Warrior() { attacks.Add("Basic Slash"); weapons.Add("Basic Sword"); items.Add("Basic Health Potion"); // 后续可以随时添加新元素 attacks.Add("Power Strike"); } }
内容的提问来源于stack exchange,提问作者Adsterr
相关产品推荐
相关产品推荐

