gpt4 book ai didi

c# - 你调用的对象是空的

转载 作者:太空狗 更新时间:2023-10-29 22:07:43 25 4
gpt4 key购买 nike

我有一个类 Cell:

public class Cell
{
public enum cellState
{
WATER,
SCAN,
SHIPUNIT,
SHOT,
HIT
}

public Cell()
{
currentCell = cellState.WATER;
MessageBox.Show(currentCell.ToString());
}

public cellState currentCell { get; set; }
}

然后我尝试在下面的类(class)中使用它:

public class NietzscheBattleshipsGameModel
{
private byte MAXCOL = 10;
private byte MAXROW = 10;

public Cell[,] HomeArray;

private Cell[,] AwayArray;

public NietzscheBattleshipsGameModel()
{
HomeArray = new Cell [MAXCOL, MAXROW];

AwayArray = new Cell [MAXCOL, MAXROW];
}


public string alphaCoords(Int32 x)
{
if (x < 0 || x > 9)
{
throw new ArgumentOutOfRangeException();
}

char alphaChar = (char)('A' + x);

return alphaChar.ToString();
}

public void test()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{

// Object reference not set to an instance of an object.
MessageBox.Show(HomeArray[i,j].currentCell.ToString());
///////////////////////////////////////////////////////

}
}
}
}

我最终没有将对象引用设置为对象的实例(在上面代码中的/////之间..

我已经尝试创建一个 Cell 实例并且它工作正常。

最佳答案

当您实例化一个数组时,数组中的项目会收到该类型的默认值。因此对于

T[] array = new T[length];

情况是,对于每个 i0 <= i < length我们有array[i] = default(T) .因此,对于引用类型 array[i]将是 null .这就是您看到 NullReferenceException 的原因.在你的情况下 Cell是引用类型,所以既然你有

HomeArray = new Cell [MAXCOL, MAXROW]; 

您所做的只是建立一个对 Cell 的引用数组s 但您从未将这些引用分配给 Cell 的实例.也就是说,您告诉编译器“给我一个可以保存对 Cell 的引用的数组”,但您没有告诉编译器“给我一个可以保存对 Cell 的引用的数组并将这些引用中的每一个分配给Cell 的新实例。”因此,编译器会将这些引用的初始值设置为 null .因此你需要初始化 HomeArray :

for (int i = 0; i < MAXCOL; i++)  { 
for (int j = 0; j < MAXROW; j++) {
HomeArray[i, j] = new Cell();
}
}

关于c# - 你调用的对象是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2201989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com