2012-07-01 10 views
1

Alors que je suis en train de déboguer le code (dans WinForms C#), il affiche une erreurUtilisation de la variable locale non affecté

"l'utilisation de la variable locale non affecté" à 'arrlist [i]'

Puisque je le compare avec une variable de base de données, je ne peux pas initialiser la taille du tableau.

Voici le code:

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]); 
      } 
     } 
    } 
} 

S'il vous plaît aidez-moi

+0

On dirait que vous pourriez simplement mettre 'string [] arrList = new arrList [this.Controls.Count]'. – benjer3

+2

En fait, pourquoi ne pas avoir 'string [] arrList = this.Controls.Select (x => x.ToString()). ToArray();'? – benjer3

Répondre

8

Vous devez initialiser la arrlist variable. Modifiez cette ligne:

string[] arrlist; 

à ceci:

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

Ou mieux, utilisez un récipient de taille dynamique comme un List<string>.

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

Ou utiliser LINQ pour obtenir le résultat directement:

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

Mais la longueur n'est pas là. seulement Count .. de toute façon cela fonctionne ... Merci pour l'aide !! :) –

+0

@MohanRajK: Merci pour la correction. S'il vous plaît également considérer les autres options, car ils sont meilleurs. –

+0

Ok @ Markarkers .. Merci encore. –

0

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

vous avez perdu l'initialisation comme: arrlist = new string [count];

0

Le problème est que arrlist est défini, mais pas initialisé.

Vous devez l'initialiser, comme ceci:

string[] arrlist = new arrlist[size]; 

Si vous ne savez pas comment grand il sera, il est préférable d'utiliser une liste:

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

et d'ajouter éléments: arrlist.add("some string");

1

Modifiez votre tableau en une liste et ajoutez des valeurs à la liste. Vous pouvez ensuite indexer les éléments de la liste directement, ou si vous avez besoin d'un tableau, vous pouvez utiliser .ToArray() sur l'instance de la liste.

Notez également que votre boucle sur j va sortir des limites sur strarray sauf si vous modifiez la comparaison à < ticket_length de <= 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]);           
+0

merci pour la correction. Cela aide aussi. :) –

Questions connexes