C# 如何根据用户响应生成计数器?

C# 如何根据用户响应生成计数器?,c#,counter,pass-by-reference,C#,Counter,Pass By Reference,我试图创建一个计数器,它将根据用户的响应递增。这是我到目前为止得到的代码: string ok = ""; int z = 0; test(ok, z); test1(ok, z); Console.WriteLine(z); } static void test(string ok, int z) { bool estok = false;

我试图创建一个计数器,它将根据用户的响应递增。这是我到目前为止得到的代码:

        string ok = "";
        int z = 0;
        test(ok, z);
        test1(ok, z);
        Console.WriteLine(z);
    }

        static void test(string ok, int z)
        {

            bool estok = false;
            while (!estok)
            {
                ConsoleKeyInfo saisie = Console.ReadKey(true);
                if (saisie.Key == ConsoleKey.A || saisie.Key == ConsoleKey.B)
                {
                    estok = true;
                    if (saisie.Key == ConsoleKey.A)
                    {

                        z++;
                    }

                    if (saisie.Key == ConsoleKey.B)
                    {
                        z--;
                    }
                }
                else
                {
                    estok = false;
                    Console.WriteLine("Error");
                }
            }


        }
            static void test1(string ok, int z)
            {
                bool estok = false;
                while (!estok)
                {
                    ConsoleKeyInfo saisie = Console.ReadKey(true);
                    if (saisie.Key == ConsoleKey.A || saisie.Key == ConsoleKey.B)
                    {
                        estok = true;
                        if (saisie.Key == ConsoleKey.A)
                        {
                            z++;
                        }

                        if (saisie.Key == ConsoleKey.B)
                        {
                            z--;
                        }
                    }
                    else
                    {
                        estok = false;
                        Console.WriteLine("Error");
                    }
                }
            }
我得到了两个函数(
test
test1
),它们都增加了
intz
Console.WriteLine(z)
将返回0,而不是我等待的2(当用户有2个正确答案时)

我认为增量不会发生,因为它在函数中,
Console.WriteLine(z)
无法到达
z++
。我怎样才能改变这一点


我怎样才能从这些中得到结果

int
和其他原语类型默认按值传递,其中as引用类型(考虑类的实例)按引用传递;这就是允许在方法返回后保留对参数的更改的原因。在更新参数值时,需要通过引用传递
z

静态无效测试(字符串正常,int z)
变成
静态无效测试(字符串正常,参考int z)

调用
测试(ok,z)变为<代码>测试(正常,参考z)


您可以从

int
中了解有关通过引用传递值的更多信息,默认情况下,其他基本类型通过值传递,其中as引用类型(考虑类的实例)通过引用传递;这就是允许在方法返回后保留对参数的更改的原因。在更新参数值时,需要通过引用传递
z

静态无效测试(字符串正常,int z)
变成
静态无效测试(字符串正常,参考int z)

调用
测试(ok,z)变为<代码>测试(正常,参考z)


您可以从

方法中了解更多有关通过引用传递值的信息。int的参数属于值类型,而不是引用类型。据我从您的问题中了解,您可能需要在方法调用中使用out关键字或从您拥有的方法返回

int z1= z;
test(ok, out z1);
int z2=z;
test1(ok, out z2);
方法声明也必须更改为

static void test(string ok, out int z)


static void test1(string ok, out int z)

或者您可以简单地在方法测试和测试1中直接放置一个
控制台。WriteLine(z)

int的方法参数是值类型而不是引用类型,据我从您的问题中了解,您可能需要在方法调用中使用out关键字或从您拥有的方法返回

int z1= z;
test(ok, out z1);
int z2=z;
test1(ok, out z2);
方法声明也必须更改为

static void test(string ok, out int z)


static void test1(string ok, out int z)
或者您可以简单地在方法测试和测试1中直接放置一个
控制台。WriteLine(z)

“C#方法参数默认具有值语义。在方法中所做的更改不应用于从Main()传递的对象。这里更好的方法是从方法返回值z。”“C#方法参数默认具有值语义。在方法中所做的更改不应用于从Main()传递的对象。这里更好的方法是从方法返回值z。