如何创建含10个不同名称Cat实例的数组并循环调用SayMiau方法?
问题分析与修正代码
你的代码存在两个关键问题:
- 初始化Cat数组时,仅指定了数组长度但未创建具体的Cat实例,数组元素默认都是
null,直接在foreach中访问cat.Name会触发NullReferenceException SayMiau被定义为静态方法,静态方法属于类而非实例,不应通过实例调用;同时无需手动传入name参数,实例本身已有Name属性可直接使用
修正后的代码如下:
// 创建数组并逐个初始化Cat实例 Cat[] cats = new Cat[10]; for (int id = 0; id < cats.Length; id++) { cats[id] = new Cat(); cats[id].Name = $"Cat{id + 1}"; } // 遍历调用每个实例的SayMiau方法 foreach (Cat cat in cats) { cat.SayMiau(); } class Cat { public string? Name; // 改为实例方法,直接使用当前实例的Name属性 public void SayMiau() { Console.WriteLine($"{Name} said Miauuuuu!"); } }
修改说明:
- 使用
for循环初始化数组:逐个创建new Cat()实例,避免空引用问题,同时给每个实例的Name赋值为Cat1到Cat10 - 将
SayMiau改为实例方法:去掉static关键字,方法内部直接通过实例的Name属性获取名称,调用时无需传参 - 优化输出格式:使用字符串插值替代占位符,代码更简洁直观
内容的提问来源于stack exchange,提问作者Beka Tchigladze
相关产品推荐
相关产品推荐

