我有这段代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Zad_8.Chapter11
{
class Program
{
static void Main(string[] args)
{
Cat[] cats = new Cat[10];
for (int i = 0; i < 10; i++)
{
cats[i].Name = "Cat " + sequence.NextValue();
}
for (int i = 0; i < 10; i++)
{
Console.WriteLine(cats[i].Name);
}
}
}
}
这是我的命名空间第11章
中的类namespace Zad_8.Chapter11
{
public class Cat
{
private string name = "Cat";
private string color;
public string Name
{
get { return this.name; }
set { this.name = value; }
}
public Cat(string name)
{
this.name = name;
}
}
}
这个类也在我的命名空间Chapter11
中namespace Zad_8.Chapter11
{
public class sequence
{
private static int current = 0;
private sequence()
{ }
public static int NextValue()
{
current++;
return current;
}
}
}
我的目标是创建10个对象 - 猫(类型)并给它们命名为CatN,其中N是它们的数字。
我有类Cat + name属性+ get和set。 我有班级序列,它会给我1到10的数字
在Main函数中我想创建数组类型Cat并使用for循环来给出这10个索引数组中的每个元素名称CAT +它的序列号。
我的错误列表中没有错误,我尝试过很多东西,比如只打印10次Cat等..但每次它都会抛出这个异常'System.NullReferenceException。
我在MSDN中读过,但没有得到足够好的东西来克服这个问题。
我也尝试了(f11)调试模式,似乎一切都很好但是当它开始用“cat [i] .Name =”Cat“+ sequence.NextValue();” 可以继续前进并坚持下去,编译器无法继续前进。我在我的数组中看到这个索引是null并且我不确定但它可能是问题。
谁能告诉我该怎么做?
我想这是一个令人烦恼和无聊的问题,但我是新手并且必须通过这个,所以请不要讨厌这个帖子。
答案 0 :(得分:1)
当你创建一系列猫
时Cat[] cats = new Cat[10];
你只是创建一个可以包含猫的数组。但除非你把猫放进去,否则实际上并没有猫。
cats[i].Name = "Cat " + sequence.NextValue();
在这里你要求数组中的'ith'项 - 它是null(没有猫在那里)并试图用null做一些事情。这是造成问题的原因。
你需要先把猫放在第一位。
cats[i] = new Cat("Cat " + sequence.NextValue());
答案 1 :(得分:1)
改变这个:
Cat[] cats = new Cat[10];
for (int i = 0; i < 10; i++)
{
cats[i].Name = "Cat " + sequence.NextValue();
}
到此:
Cat[] cats = new Cat[10];
for (int i = 0; i < 10; i++)
{
cats[i] = new Cat(); //<------This line is new
cats[i].Name = "Cat " + sequence.NextValue();
}
创建数组时,它不会自动实例化(创建)新对象。你需要具体告诉它这样做。
答案 2 :(得分:0)
cats[i]
是null
,因为对象构造函数会将默认值放在每个新槽中......对于引用类型,它是null。您无法引用空对象的.Name
创建整个cat对象并将其整体插入。
您的更新代码是什么样的:
cats[i] = new Cat("Cat " + sequence.NextValue());
答案 3 :(得分:0)
必须先创建您的Cat对象。用这个替换你的for循环:
for (int i = 0; i < 10; i++)
{
cats[i] = new Cat("Cat " + sequence.NextValue());
}
答案 4 :(得分:0)
您尚未创建Object cat。 您使用空值初始化数组,因为Cat是引用类型。
Cat[] cats = new Cat[10];
for (int i = 0; i < 10; i++)
{
cats[i] = new Cat("Cat " + sequence.NextValue());
}