c#list对象超出范围。不知道如何处理它

时间:2014-10-26 20:53:50

标签: c#

所以,我有一个简单的C#应用​​程序。该应用程序允许用户输入测试分数,然后单击“添加”按钮。单击时,文本框内容(如果有效)应进入列表对象。

我当前的代码是说当前上下文中不存在该对象。

private void ScoreCalculatorApplication_Load(object sender, EventArgs e)
    {
        List<int> scoreList = new List<int>();
    }

    private void btn_Add_Click(object sender, EventArgs e)
    {
        scoreList.Add();//this line has the problem
    }

所以,我不确定为什么scoreList不存在,因为ScoreCalculatorApplication_Load方法在加载应用程序时执行。

无论如何,我也考虑过这样的事情:

private void ScoreCalculatorApplication_Load(object sender, EventArgs e)
        {
             //remove this method.
        }

        private void btn_Add_Click(object sender, EventArgs e)
        {
           //is there a test to see if this object exists?
            if (//see if the list does not exist)
                //if not existant, create it here.
            scoreList.Add();
        }

所以,问题是我不知道如何测试对象是否存在。

2 个答案:

答案 0 :(得分:3)

这里的问题是你在比btn_Add_Click存在更严格的范围内创建scoreList。你已经在ScoreCalculatorApplication_Load方法的范围内定义了它,这意味着引用将在之后自动进行垃圾回收该方法完成,并且永远不会在该方法之外访问。

如果希望scoreList对象可供类中的所有方法访问,则需要创建字段或属性。在类范围内,创建并初始化List:

private List<int> scoreList = new List<int>();
private void ScoreCalculatorApplication_Load(object sender, EventArgs e)
{
    /// put whatever else you need to do on loading here
}

scoreList现在可以在您班级的任何给定实例中访问。请注意,如果您需要其他对象可以访问scoreList,则应将其设为公共属性,而不是私有字段。

请注意,确实不需要检查对象是否存在&#34;从某种意义上说,如果您引用了该范围内不存在的对象或方法,程序将无法编译和运行。如果您愿意,可以检查scoreList是否已初始化,并且可以通过检查它是否为空来填充,例如if(scoreList == null)。

答案 1 :(得分:1)

furkle回答了主要问题。

只是想回答您的补充问题,现在得分列表在范围内,您可以测试它是否已使用if(scoreList==null)进行初始化