【问题标题】:Why am I getting an error indicating that my variable doesn't exist, when I've already defined it?当我已经定义了变量时,为什么我会收到一条错误消息,指出我的变量不存在?
【发布时间】:2013-07-18 00:44:34
【问题描述】:

我收到一条错误消息,指出当前上下文中不存在 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.
}

【问题讨论】:

    标签: c# variables


    【解决方案1】:

    你已经定义了数组,但是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
    }
    

    进一步阅读

    【讨论】:

    • 确实如此。您的评论无效!
    • @ColeJohnson 是的,抱歉,我忘了从 OP 的原始代码中删除它。现在已经修好了。
    【解决方案2】:

    MyRandomArraylocalQuiz_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);
    }
    

    或者,由于您有一个计时器滴答作响,当您设置计时器回调时,您可以将其作为callback state 的一部分传递给MyRandomArray

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 2019-08-18
      • 1970-01-01
      • 2022-06-16
      • 1970-01-01
      • 2015-03-16
      • 2020-01-17
      相关资源
      最近更新 更多