0

我有一个表单,我通过各种对象收集用户输入:txtBoxes、radioButtons、cmboBoxes 甚至 numericUpDown。这些值必须被存储,所以我假设 List<> 比 Array 更适合这个,因为我们不知道我们将输入多少“项目”。我计划为每个字段实现 Lists<>。我想..填写表格,单击 Enter Next,所有字段都存储它们的值,然后清除所有字段。再次填写表格x次并最终显示所有内容..但我的逻辑中遗漏了一些我无法指出的东西。
但是现在让我感到困惑的是我的 foreach 循环中的“名称”错误。它说它是一个局部变量并且它不能在这里使用它,它会改变它在父/当前范围内其他地方的含义。但这就是为什么我将它声明为一个字段,假设所有对变量的调用都可以使用它。我也在这里搜索,发现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
4

1 回答 1

0

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

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

我建议:

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

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

    foreach (string listName in inputNameList)
    

接下来,您需要弄清楚for中间的循环实际上是做什么的。如果列表一开始是空的,它什么也不做。如果一开始为空,则循环将永远持续下去。

于 2013-07-03T19:04:41.050 回答