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异常错误,在一个没有错误的地方。@关于新问题,请回答新问题,或在此处进行更多解释