一个非常非常简单的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;
}
当你创建这样一个引用类型的数组时,数组是用null初始化的——没有实际的对象被构造(除了数组本身)。
因此,你需要显式地创建数组的每个元素。
对于您的示例,您需要这样做:
classA[] test;
test = new classA[2];
test[0] = new classA();
test[1] = new classA();
请注意,如果您使用值类型,如结构体或基本类型(int, double, char等),则不需要这样做。
您经常编写循环来初始化数组,因此对于您的代码示例:
classA[] test;
test = new classA[2];
for (int i = 0; i < test.Count; ++i)
test[i] = new classA();
您创建了一个类型为ClassA
的数组,但没有初始化元素,因此数组中的元素都是null
。要创建一个带有内容的简单测试数组,请使用数组初始化器:
var test = new ClassA[] { new ClassA(), new ClassA() };
你可以按下面的方法做
test = new classA[2].Select(c=>new classA()).ToArray();
调用new classA[2]
后,数组中有空项。以上代码将为每个数组项添加新的ClassA对象。现在可以毫无例外地调用Console.Write(test[0].getName());