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。