static void Main(string[] args)
{
int test = 1;
resetTest();
Console.Write(test); // Should be 0
}
static void resetTest()
{
test = 0;
}
为什么不起作用?我怎么才能得到它? (我不想使用int函数并返回变量)现在我有一条错误消息,说明函数resetTest上的变量test是未定义的。
答案 0 :(得分:5)
因为测试是在Main方法的范围内定义的。
您需要将其移到该方法之外才能使其正常工作。
类似的东西:
static int test = 1;
static void Main(string[] args)
{
resetTest();
Console.Write(test); // Should be 0
}
static void resetTest()
{
test = 0;
}
答案 1 :(得分:2)
变量测试是Main过程的本地变量。您必须在该范围之外声明它。
static int test = 0;
static void Main(string[] args)
{
test = 1;
Console.Write(test); // Should be 1
resetTest();
Console.Write(test); // Should be 0
}
static void resetTest()
{
test = 0;
}
答案 2 :(得分:2)
这不是void返回的问题。问题是测试的范围是Main方法。你必须把它变成一个静态的场来做你想做的事。
答案 3 :(得分:2)
这将起作用
static int test = 1;
static void Main(string[] args)
{
reserTest();
Console.Write(test); // Should be 0
}
static void resetTest()
{
test = 0;
}
答案 4 :(得分:2)
test是Main函数的局部变量。因此,您无法从单独的函数访问它。
如果你想这样做,你需要将它提升为你班级的(静态的)成员变量。
答案 5 :(得分:2)
test
是Main()
的局部变量。所以resetTest()
甚至无法访问它,忘记重置它。
答案 6 :(得分:2)
test
无法访问 resetTest()
,因为局部变量test
的范围是您的Main
函数。
如果要更改函数resetTest()
答案 7 :(得分:2)
有几种选择。
1)您可以通过引用将变量传递给函数:
static void resetTest(ref int test)
{
test = 0;
}
这允许您更改此(或任何其他)变量。
2)你可以在Main之外声明它,作为类型本身的静态int:
static int test;
static void Main(string[] args)
{
resetTest();
Console.Write(test); // Should be 0
}
static void resetTest()
{
test = 0;
}
这将它放在整个类型的范围内。
答案 8 :(得分:2)
它不起作用,因为您将test
定义为Main
静态方法的本地。尝试将其定义为
private static int test = 1;
在您的班级定义中,但不在任何方法之内。
答案 9 :(得分:2)
这是范围和静态变量问题。现在的测试范围仅限于main函数,因此resetTest甚至无法访问它。
目前,您已将resetTest设置为static method。要更改静态方法中的任何变量,该变量将需要作为引用传递(在另一个答案中回答),或者该变量需要是该类的静态变量。
所以你现在有一些不匹配的代码。
public class SomeClass {
public int test = 1;
static void Main(string[] args) {
SomeClass myClass = new SomeClass(); // Will instantiate test as 1
myClass.resetTest();
Console.Write(myClass.test); // Should be 0
}
public void resetTest() {
test = 0;
}
}
答案 10 :(得分:2)
测试变量不是Rested,如果你想实现它,不仅是测试,而且任何Int进入你的app。这样你应该通过Reference
传递变量static void Main(string[] args)
{
int test = 1;
reserTest(ref test);
Console.Write(test); // Should be 0 now
}
static void resetTest(ref int i)
{
i = 0;
}
答案 11 :(得分:2)
您在Main方法中定义了“test”变量,因此它只存在于其中。
你可以(不要这样做,因为你的意思并不代表你应该这样做)1:
将声明置于方法
之外int test = 1;
static void Main(string[] args)
{
resetTest();
Console.Write(test); // Should be 0
}
static void resetTest()
{
test = 0;
}
通过引用发送变量:
static void Main(string[] args)
{
int test = 1;
resetTest(ref test);
Console.Write(test); // Should be 0
}
static void resetTest(ref int test)
{
test = 0;
}
无论哪种方式,您都应该阅读有关范围的内容:http://www.blackwasp.co.uk/CSharpVariableScopes.aspx