可访问的列表范围< >变量

时间:2013-07-03 18:57:58

标签: c# list global-variables

我有一个表单,我通过各种对象收集用户输入:txtBoxes,radioButtons,cmboBoxes甚至numericUpDown。必须存储这些值,因此我假设List< >因为我们不知道我们将输入多少“项目”,所以比阵列更适合这种情况。我打算实施Lists< >对于每个领域。 我想...填写表单,单击Enter Next,其中所有字段都存储其值,然后清除所有字段。再次填写表格x次并最终显示所有...但我在逻辑中遗漏了一些我无法指出的东西。
但现在让我感到困惑的是我的foreach循环中的'Name'错误。它说它是一个局部变量,它不能在这里使用它,它将改变它在父/当前范围的其他地方的含义。但这就是为什么我将它声明为一个字段,假设所有对变量的调用都可以使用它。我也在这里搜索过,发现Question about List scope in C#,但不确定如何应用它。 以下代码来自我的第一个txtBox。请原谅我的过度评论。这是我'草绘',为我自己做提醒。我知道这个问题很容易,我只是没有看到它..

namespace Employees
{
    public partial class Employees : Form
    {
        public Employees()
        {       //field declarations.
            string Name;        //'declared but never used?'
            InitializeComponent();
        }

        private void txtInputName_TextChanged(object sender, EventArgs e)
        { //#1.) *********************************
            Name = txtInputName.Text;
            List<string> InputNameList = new List<string>();
            //InputNameList.Add(Name); 
            //List for holding name input from txtInputName.Text
            //will need ForLoop for consecutive entries. 


            for (int index = 0; index < InputNameList.Count; index++)
            {
                InputNameList.Add(Name);    //but, it's used here.
                MessageBox.Show("success");//Fill List
                txtInputName.Clear();
                txtInputName.Focus();
            } //endFor 


            //for (int index = 0; index < InputNameList.Count; index++); //Display List
            //{             
            //    lstBoxOut.Items.Add(Name);
            //} //displays as before.

            foreach(string Name in InputNameList)   //error on thisName.
            {              
             lstBoxOut.Items.Add(Name);            
            }   //end ForEach
        }      //end txtInputName

1 个答案:

答案 0 :(得分:0)

问题与列表本身无关,而与Name变量有关。

您在构造函数中将其声明为局部变量,但从不使用它。然后,您尝试在txtInputName_TextChanged的开头使用它而不声明它。然后,您将在foreach循环中再次声明它。

我建议:

  • 更改所有变量名称以遵循以
  • 开头的.NET命名约定
  • 删除构造函数中的无意义声明
  • 更改方法的开头以声明变量:

    string name = txtInputName.Text;
    
  • 更改foreach循环以声明不同的变量:

    foreach (string listName in inputNameList)
    

接下来,您需要弄清楚中间的for循环实际上要做什么。如果列表为空,那么它什么都不做。如果它的为空,那么循环将永远继续。