通过void函数重置变量

时间:2011-09-20 14:22:02

标签: c#

static void Main(string[] args)
{
    int test = 1;

    resetTest();

    Console.Write(test); // Should be 0
}

static void resetTest()
{
    test = 0;
}

为什么不起作用?我怎么才能得到它? (我不想使用int函数并返回变量)现在我有一条错误消息,说明函数resetTest上的变量test是未定义的。

12 个答案:

答案 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)

testMain()的局部变量。所以resetTest()甚至无法访问它,忘记重置它。

答案 6 :(得分:2)

您的函数test无法访问

resetTest(),因为局部变量test的范围是您的Main函数。

如果要更改函数resetTest()

中的值,则必须通过ref传递它

答案 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