Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 试图在多个方法中使用一个字段,但在我的字段看起来不是';不被使用_C# - Fatal编程技术网

C# 试图在多个方法中使用一个字段,但在我的字段看起来不是';不被使用

C# 试图在多个方法中使用一个字段,但在我的字段看起来不是';不被使用,c#,C#,我似乎无法使我的字段/列表正常工作。我想添加到列表中,并在CheckUserInput和PlayerMove方法中使用该列表。它说它没有被使用,但我在这些方法中使用它,没有任何错误 我试着用它玩了一会儿,所有的方法都是静态方法,所以我必须创建一个静态字段 private static List<string> AlreadyUsed = new List<string>(); private static void CheckUserInput(ref int play

我似乎无法使我的字段/列表正常工作。我想添加到列表中,并在
CheckUserInput
PlayerMove
方法中使用该列表。它说它没有被使用,但我在这些方法中使用它,没有任何错误

我试着用它玩了一会儿,所有的方法都是静态方法,所以我必须创建一个静态字段

private static List<string> AlreadyUsed = new List<string>();

private static void CheckUserInput(ref int player, ref string answer, ref bool error)
    {
        AlreadyUsed.Add("");

        if(int.Parse(answer) > 9)
        {
            Console.WriteLine("You have entered a value outside the array. Skipping your turn.");
            error = true;
        }
        else
        {
            for (int i = 0; i <= 9; i++)
            {
                if (AlreadyUsed[i] == "X" || AlreadyUsed[i] == "O")
                {
                    Console.WriteLine("You have already entered a value in this slot. Skipping your turn.");
                    error = true;
                }
            }
        }
    }


private static void PlayerMove(ref string answer, string[] arr, ref int player) //make whole new class for this method?
    {
        for (int i = 0; i <= 8; i++) //make player move
        {
            if (answer == arr[i])
            {
                if (player == 1)
                {
                    arr[i] = "X";
                    AlreadyUsed.Add(answer);
                }
                else
                {
                    arr[i] = "O";
                    AlreadyUsed.Add(answer);
                }
            }
        }
    }
private static List AlreadyUsed=new List();
私有静态void CheckUserInput(ref int播放器、ref字符串应答、ref bool错误)
{
加上(“”);
如果(整数解析(答案)>9)
{
WriteLine(“您输入了数组之外的值。跳过轮次。”);
错误=真;
}
其他的
{
for(int i=0;i看起来像是在CheckUserInput方法中,您迭代列表,直到索引9,但是您的代码显示,列表中没有那么多的项要迭代,并且会发生索引超出范围的异常

在该for循环中,如果您试图检查AlreadyUsed是否包含字符串“X”或“O”,则无需使用contains方法执行for循环,请使用以下代码替换CheckUserInput方法中的for循环:

if (AlreadyUsed.Contains("X") || AlreadyUsed.Contains("O"))
{
  Console.WriteLine("You have already entered a value in this slot. Skipping your turn.");
  error = true;
}

这不是错误消息所说的。请共享确切的错误消息。
用于(int i=0;我很抱歉没有输入错误消息,但是我得到了一个NullReferenceException,并通过查看错误消息找到了问题的根源。我不确定如何复制错误消息,但它说:对象引用未设置为对象的实例,但由于它是静态的,我认为我不必实例化i或者我在这里遗漏了什么?其他人也可以看到我的评论,即使它被标记为重复的,因为我仍然有一个问题。谢谢你的帮助,但是在这段代码上面,我需要设置对象对对象实例的引用,但我认为这不是必需的,因为它是static?静态类不能实例化,但这不适用于静态字段!