我有一个单元格类:
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; }
}
然后我尝试在下面的课程中使用它:
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];
情况就是对于每一个i
with 0 <= i < length
我们有array[i] = default(T)
。因此,对于引用类型array[i]
将null
。这就是为什么您会看到NullReferenceException
。在你的情况下Cell
是一个引用类型,所以因为你有
HomeArray = new Cell [MAXCOL, MAXROW];
你所做的就是建立一个引用数组Cell
s 但您从未将这些引用分配给 的实例Cell
。也就是说,你告诉编译器“给我一个可以保存对Cell
s”,但你没有告诉编译器“给我一个可以保存引用的数组Cell
s 并将每个引用分配给一个新实例Cell
” 因此,编译器会将这些引用的初始值设置为null
。因此您需要初始化HomeArray
:
for (int i = 0; i < MAXCOL; i++) {
for (int j = 0; j < MAXROW; j++) {
HomeArray[i, j] = new Cell();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)