我收到索引超出范围错误,但不知道为什么?

时间:2021-03-28 17:18:32

标签: c#

嗨,我正在用 C# 做一些事情,但我遇到了索引超出范围的错误,我不明白为什么。我有一个包含字符串的对象列表。用户可以添加许多字符串值,从而用相同数量的对象填充列表。当我稍后尝试使用 for 循环访问列表元素时,它给了我索引超出范围错误!这是对我的代码的模仿,基本上总结了它:

class game
{

    public List<Player> PlayerList = new List<Player>();
    public List<Player> Playerlist 
    {
    
        get { return PlayerList; }
    
    }

    public static int PlayerCount = 0;
    public void PlayGame()
    {

        Console.WriteLine("ENTER NUMBER OF PLAYERS: ");
        PlayerCount = int.Parse(Console.ReadLine());
        for (int n = 1; n < PlayerCount + 1; n++)
        {

            Console.WriteLine("ENTER NAME FOR PLAYER " + n + ":");
            PlayerList.Add(new Player() { PlayerName = Console.ReadLine() });

        }

        Player playeraccess = new Player();
        playeraccess.AddTurns();

    }
public class Player
{
    private static int throw1;
    public int Throw1
    {

        get { return throw1; }
        set { throw1 = value; }

    }
    private static int throw2;
    public int Throw2
    {

        get { return throw2; }
        set { throw2 = value; }

    }
    private static int throw3;
    public int Throw3
    {

        get { return throw3; }
        set { throw3 = value; }

    }
    int firstruncheck = 0;
    int turnloop = 0;
    int turncounter = 0;
    List<Turns> playerturn = new List<Turns>();
    public Player(string playername = "")
    {

        PlayerName = playername;

    }

    public string PlayerName { get; set; }

    public override string ToString()
    {
        return base.ToString();
    }
    public void AddTurns()
    {
        game gameaccess = new game();
        for(turnloop = 0; turnloop < game.PlayerCount; turnloop++) 
        {

            gameaccess.Playerlist[turnloop].playerturn.Add(new Turns());

在最后一行,我得到一个索引超出范围错误。但它不应该发生,因为 User 已经在 PlayerList 中添加了元素,对吗?

1 个答案:

答案 0 :(得分:1)

您正在为每个游戏实例创建一个新玩家列表,但在静态变量中跟踪计数(游戏所有实例的计数的一个实例)。

要解决这个问题,您应该决定是跟踪每场比赛的玩家(非静态列表和计数)还是每次运行程序(静态列表和计数)。对于后者,请阅读静态构造函数。

相关问题