1

このコードを(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

4 に答える 4

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();
于 2012-07-01T16:00:51.823 に答える
1

配列をリストに変更し、リストに値を追加します。次に、リスト要素に直接インデックスを付けるか、配列が必要な場合.ToArray()はリスト インスタンスで使用できます。

また、比較をfromに変更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]);                                          
于 2012-07-01T16:09:24.067 に答える
0

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

次のように初期化を失いました:arrlist = new string [count];

于 2012-07-01T16:02:23.740 に答える
0

問題は、arrlistが定義されているが、初期化されていないことです。

次のように初期化する必要があります。

string[] arrlist = new arrlist[size];

大きさがわからない場合は、リストを使用することをお勧めします。

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

アイテムを追加するには:arrlist.add("some string");

于 2012-07-01T16:02:31.523 に答える