TicTacToe game in C# I have been studying C#, and I am trying to model the Tic Tac Toe game. Is my program reasonable or is there anything I need to improve?

 enum Result
{
    None,
    Win,
    Draw
}

public class TicTacToe
{
    static char[] board = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
    char player = 'O';
    Result result = Result.None;

    public void PlayGame()
    {
        Intro();
        do
        {
            Console.Clear();
            Console.WriteLine("Player 1 : O Player 2 : X");
            DrawBoard();
            Console.WriteLine($"\nPlayer {player}'s Turn \nPlease Enter the empty number");

            label:
            int choice = 0;

            while (!int.TryParse(Console.ReadLine(), out choice))
            {
                Console.WriteLine("Enter the num please");
            }
            if (choice &gt;= 10)
            {
                Console.WriteLine("Please enter btw 1 - 9");
                goto label;
            }

            if (board[choice] != 'X' &amp;&amp; board[choice] != 'O')
            {
                board[choice] = player;
                ChangeTurn();
            }

            CheckWin();
        } while (result != Result.Draw &amp;&amp; result != Result.Win);

        Console.Clear();
        DrawBoard();
        GameResult();
        Console.ReadKey();

    }

    void ChangeTurn()
    {
      if (player == 'X')
          player = 'O';
      else if (player == 'O')
          player = 'X';
    }
    void GameResult()
    {
        if (result == Result.Win)
        {
            ChangeTurn();
            Console.WriteLine("Player {0} has won", player);
        }
        else if(result == Result.Draw)
        {
            Console.WriteLine("Draw");
        }
        Console.ReadLine();
    }
    void Intro()
    {
        Console.WriteLine("Welcome to TieTacToe");
        Console.WriteLine("Press any Key to continue");
        Console.ReadKey();
        Console.Clear();
    }
    void DrawBoard()
    {
        int x = 1;
        Console.WriteLine();
        for (int row = 0; row &lt; 3; row++)
        {
            Console.Write("| ");
            for (int col = 0; col &lt; 3; col++)
            {
                Console.Write(board[x]);
                Console.Write(" | ");
                x++;
            }
            Console.WriteLine();
        }
    } 
    void CheckWin()
    {
        // horzontial
        if (board[1] == board[2] &amp;&amp; board[2] == board[3])
        {
            result = Result.Win;
        }
        else if (board[4] == board[5] &amp;&amp; board[5] == board[6])
        {
            result = Result.Win;
        }
        else if (board[7] == board[8] &amp;&amp; board[8] == board[9])
        {
            result = Result.Win;
        }
        // vertical
        else if (board[1] == board[4] &amp;&amp; board[4] == board[7])
        {
            result = Result.Win;
        }
        else if (board[2] == board[5] &amp;&amp; board[5] == board[8])
        {
            result = Result.Win;
        }
        else if (board[3] == board[6] &amp;&amp; board[6] == board[9])
        {
            result = Result.Win;
        }
        // X
        else if (board[1] == board[5] &amp;&amp; board[5] == board[9])
        {
            result = Result.Win;
        }
        else if (board[3] == board[5] &amp;&amp; board[5] == board[7])
        {
            result = Result.Win;
        }
        else if (board[1] != '1' &amp;&amp; board[2] != '2' &amp;&amp; board[3] != '3' &amp;&amp; board[4] != '4' &amp;&amp; board[5] != '5' &amp;&amp; board[6] != '6' &amp;&amp; board[7] != '7' &amp;&amp; board[8] != '8' &amp;&amp; board[9] != '9')
        {
            result = Result.Draw;
        }
        else
        {
            result = Result.None;
        }
    }
}
If you want to be completely safe, I would also check the 'choice' to make sure that it was not a negative number.

Goto's should be avoided. You can easily refactor your code to use a while loop and break.

In your function GameResult(), I would use a switch statement instead of the if chain.

I am also thinking that CheckWin() might be a bit too cumbersome with all of the if statements and the checking of the individual cells. I might keep a "shadow board" behind the scenes, where a cell is 1 if it is an X and -1 if it is an O. Some simple addition and a test to see if the Math.Abs(sum) == 3 is an easy way to test for a win. For example:

if (Math.Abs(board[1] + board[2] + board[3]) == 3)
  result = Result.Win;


You can even refactor what I wrote above by keeping a list of the triplets to check.

Good luck with your studies of C#.