一个非常非常简单的C#问题。
我想创建另一个类的普通小数组。
代码:
class Program
{
static void Main(string[] args)
{
classA[] test;
test = new classA[2];
Console.Write(test[0].getName());
class classA
{
string name;
public classA()
{
this.name = "zup";
}
public string getName()
{
return this.name;
}
为什么不让它让我?
答案 0 :(得分:2)
当你创建一个像这样的引用类型的数组时,数组是用空值初始化的 - 没有构造实际的对象(除了数组本身)。
因此,您需要显式创建数组的每个元素。
对于您的示例,您需要执行此操作:
classA[] test;
test = new classA[2];
test[0] = new classA();
test[1] = new classA();
请注意,如果您使用的是 value 类型,例如struct或基本类型(int,double,char等),则不需要这样做。
您经常编写一个循环来初始化一个数组,所以再次为您的代码示例:
classA[] test;
test = new classA[2];
for (int i = 0; i < test.Count; ++i)
test[i] = new classA();
答案 1 :(得分:2)
您创建了一个ClassA
类型的数组,但不要对元素进行初始化,因此数组中的元素都是null
。要创建一个包含内容的简单测试数组,请改为使用数组初始值设定项:
var test = new ClassA[] { new ClassA(), new ClassA() };
答案 2 :(得分:1)
您可以按照以下方式进行操作
test = new classA[2].Select(c=>new classA()).ToArray();
调用new classA[2]
后,数组中有空项。上面的代码将为每个数组项添加新的ClassA对象。现在您可以毫无例外地致电Console.Write(test[0].getName());