当我已经定义了变量时,为什么我会收到一个错误,表明我的变量不存在?

时间:2013-07-18 00:44:35

标签: c# variables

我收到错误,指示当前上下文中不存在MyRandomArray。如何在C#WinForms应用程序中跨类访问变量?

public void Quiz_Load(object sender, EventArgs e)
{
    string[] MyRandomArray = getWordList();
}

private void timer1_Tick(object sender, EventArgs e)
{
    somefunction(MyRandomArray);/// MyRandomArray doesn't exist in the current context.
}

2 个答案:

答案 0 :(得分:8)

您已在Quiz_Load方法的范围内定义了数组,但,因此timer1_Tick的范围并不了解它。如果将其声明为类的实例成员,则可以从任何实例方法访问它:

private string[] MyRandomArray;

public void Quiz_Load(object sender, EventArgs e)
{
    this.MyRandomArray = getWordList();
}

private void timer1_Tick(object sender, EventArgs e)
{
   somefunction(this.MyRandomArray); // No problem
}

进一步阅读

答案 1 :(得分:4)

MyRandomArray Quiz_Load方法为local;因此,您无法在timer1_Tick方法中看到它。如果需要跨实例方法显示数组,则必须使用字段来存储数组:

private string[] MyRandomArray;

public void Quiz_Load(object sender, EventArgs e) {
    this.MyRandomArray = getWordList();
}

private void timer1_Tick(object sender, EventArgs e) {
    somefunction(this.MyRandomArray);
}

或者,由于您有一个计时器滴答,当您设置计时器回调时,您可以将callback state作为MyRandomArray的一部分进行设置。