使用未分配的局部变量

时间:2012-07-01 15:58:35

标签: c# arrays winforms

当我尝试调试此代码时(在C#WinForms中),它显示错误

  在'arrlist [i]'

“使用未分配的本地变量”

由于我将它与数据库变量进行比较,我无法初始化数组的大小。

这是代码:

if (count != 0)
{
    OleDbCommand cmd1 = new OleDbCommand(
        "select seat_no, booking_date, show_time "+
        "from tickets "+
        "where ticket_no = (select max(ticket_no) from tickets)", c);
    OleDbDataReader oledb1 = cmd1.ExecuteReader();
    oledb1.Read();
    string retr_seats = oledb1.GetString(0);
    char comma = ',';
    string[] strarray = retr_seats.Split(comma);
    int ticket_length = strarray.Length;
    string[] arrlist;
    int i = 0;      
    foreach(var control in this.Controls)
    {
        if(control is Label)
        {           
            arrlist[i] = control.ToString();
            i++;
        }
   }       
   for(var j=0;j<=ticket_length;j++)
   {
       for (var k = 0; k <= i-1; k++)
       {
            if (arrlist[k].Contains(strarray[j]))
            {
                MessageBox.Show(strarray[j]);
            }
       }
   }
}

请帮帮我

4 个答案:

答案 0 :(得分:8)

您需要初始化变量arrlist。改变这一行:

string[] arrlist;

对此:

string[] arrlist = new string[this.Controls.Count]; // Must be big enough.

或者更好的是,使用动态大小的容器,例如List<string>

List<string> arrList = new List<string>();
foreach(var control in this.Controls)
{
    if(control is Label)
    {
        arrlist.Add(control.ToString());
    }
}

或者使用LINQ直接获得结果:

string[] arrlist = this.Controls
    .OfType<Label>()
    .Select(control => control.ToString())
    .ToArray();

答案 1 :(得分:1)

将数组更改为列表,并将值添加到列表中。然后,您可以直接索引列表元素,或者如果需要数组,则可以在列表实例上使用.ToArray()

另请注意,j上的for循环将超出strarray的界限,除非您将对比从< ticket_length更改为<= ticket_length

...

var arrlist = new List<string>();

foreach(var control in this.Controls) 
if(control is Label) 
{ 
    arrlist.Add(control.ToString()); 
} 

for(var j=0;j<ticket_length;j++)  
    for (var k = 0; k < arrlist.Count; k++)  
        if (arrlist[k].Contains(strarray[j]))  
             MessageBox.Show(strarray[j]);                                          

答案 2 :(得分:0)

string [] arrlist; .... arrlist [i] = control.ToString();

你失去了初始化,如:arrlist = new string [count];

答案 3 :(得分:0)

问题是arrlist已定义,但尚未初始化。

你需要初始化它,如下所示:

string[] arrlist = new arrlist[size];

如果您不知道它有多大,最好使用一个列表:

List<string> arrlist = new List<string>();

并添加项目:arrlist.add("some string");