C# 为什么我的方法返回null?
这是我的类,它声明了一个正方形数组,出于某种原因,当我调用C# 为什么我的方法返回null?,c#,winforms,C#,Winforms,这是我的类,它声明了一个正方形数组,出于某种原因,当我调用GetGameBoardSquare()方法(在另一个类中)时,它返回null 我的GetGameBoardSquare()方法有问题吗?或者可能是我声明正方形的方式有问题 public static class Board { private static Square[] gameBoard = new Square[56]; static public void SetUpBoard() {
GetGameBoardSquare()
方法(在另一个类中)时,它返回null
我的GetGameBoardSquare()
方法有问题吗?或者可能是我声明正方形的方式有问题
public static class Board
{
private static Square[] gameBoard = new Square[56];
static public void SetUpBoard()
{
for (int i = 1; i == 55; i++)
{
gameBoard[i] = new Square("Ordinary Square", i);
}
gameBoard[0] = new Square("Start", 0);
gameBoard[4] = new Square.Lose_Square("Lose Square", 4);
gameBoard[5] = new Square.Chance_Square("Chance Square", 5);
gameBoard[9] = new Square.Win_Square("Win Square", 9);
gameBoard[11] = new Square.Chance_Square("Chance Square", 11);
gameBoard[14] = new Square.Lose_Square("Lose Square", 14);
gameBoard[17] = new Square.Chance_Square("Chance Square", 17);
gameBoard[19] = new Square.Win_Square("Win Square", 19);
gameBoard[24] = new Square.Lose_Square("Lose Square", 24);
gameBoard[29] = new Square.Win_Square("Win Square", 29);
gameBoard[34] = new Square.Lose_Square("Lose Square", 34);
gameBoard[35] = new Square.Chance_Square("Chance Square", 35);
gameBoard[39] = new Square.Win_Square("Win Square", 39);
gameBoard[44] = new Square.Lose_Square("Lose Square", 44);
gameBoard[47] = new Square.Chance_Square("Chance Square", 47);
gameBoard[49] = new Square.Win_Square("Win Square", 49);
gameBoard[53] = new Square.Chance_Square("Chance Square", 53);
gameBoard[55] = new Square("Finish", 56);
}
public static Square GetGameBoardSquare(int n)
{
Square S = new Square();
S = gameBoard[n];
return S;
}
public static Square StartSquare()
{
return gameBoard[0];
}
public static Square NextSquare(int n)
{
return gameBoard[(n+1)];
}
}
您的
For
循环不正确。它从不在你的代码中循环。这样做:
for (int i = 1; i <= 55; i++)
{
//your code
}
for(inti=1;i值得一提的是,除了明显的for
循环错误之外,整个类都非常容易出错。
首先,如果未调用SetUpBoard
,它将无法正常运行。因为这看起来是一个静态不可变信息,所以最好将私有数组设置为只读,并使用初始值设定项或静态构造函数对其进行完全初始化。
其次,在这个设置中,很难看到发生了什么。如果你把事情搞砸了,也很难看到。例如,Square
classes构造函数的第二个参数是索引,但不是在这一行中gameBoard[55]=new Square(“Finish”,56);
这可能是故意的,但更可能是一个bug
下面是一个避免所有这些陷阱的示例:
public static class Board
{
const int N = 56;
private static readonly Square[] gameBoard =
Enumerable.Range(0, N).Select(n => CreateSquare(n)).ToArray();
static Square CreateSquare(int n)
{
switch (n)
{
case 0:
return new Square("Start", n);
case N - 1:
return new Square("Finish", n);
case 4:
case 14:
case 24:
case 34:
case 44:
return new Square.Lose_Square("Lose Square", n);
case 5:
case 17:
case 35:
case 47:
return new Square.Chance_Square("Chance Square", n);
case 9:
case 19:
case 29:
case 39:
case 49:
return new Square.Win_Square("Win Square", n);
default:
return new Square("Ordinary Square", n);
}
}
public static Square GetGameBoardSquare(int n)
{
return gameBoard[n];
}
public static Square StartSquare()
{
return gameBoard[0];
}
public static Square NextSquare(int n)
{
return gameBoard[n + 1];
}
}
当然,还有很多其他的方法可以做到这一点,但是 Switter 语句允许你很容易地重新排列到哪里去,阻止你使用重复的索引,并且是可读的。 @ USER 2496303,如果有助于鼓励更多的人回答你的问题,请考虑将答案作为正确答案。d、 我的程序第一次做了它应该做的,然后第二次没有,在什么都没有改变之后!idk发生了什么now@user2396303“不工作”是什么意思?你得到的是<代码> null <代码>再次返回吗?是的,Sult.null Rebug异常错误,在一个没有错误的地方。@关于新问题,请回答新问题,或在此处进行更多解释