当我尝试调试此代码时(在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]);
}
}
}
}
请帮帮我
答案 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");