2010-03-22 14 views
6

Sto provando a creare un array dinamico in C# ma ricevo un fastidioso messaggio di errore. Qui è il mio codice:Impossibile creare un array in C#

private void Form1_Load(object sender, EventArgs e) 
    { 
     int[] dataArray; 
     Random random = new Random(); 
     for (int i = 0; i < random.Next(1, 10); i++) 
     { 
      dataArray[i] = random.Next(1, 1000); 
     } 
    } 

E l'errore:

Use of unassigned local variable 'dataArray' 

questa è solo la mia mente sconcertante. Sono venuto da VB, quindi per favore, gentile, lol.

Cheers.

risposta

25

Non hai creato l'array - hai dichiarato la variabile, ma non gli hai dato un valore.

Si noti che gli array hanno sempre una dimensione fissa. Se vuoi una struttura dati che puoi semplicemente aggiungere, devi usare List<T>. Tuttavia, consiglierei di calcolare la misura una volta anziché su ogni iterazione attraverso il ciclo. Per esempio:

private void Form1_Load(object sender, EventArgs e) 
{ 
    List<T> dataArray = new List<T>(); 
    Random random = new Random(); 
    int size = random.Next(1, 10); 
    for (int i = 0; i < size; i++) 
    { 
     dataArray.Add(random.Next(1, 1000)); 
    } 
} 

Naturalmente se si sta lavorando in anticipo le dimensioni, si può usare un array, dopo tutto:

private void Form1_Load(object sender, EventArgs e) 
{ 
    Random random = new Random(); 
    int size = random.Next(1, 10); 
    int[] dataArray = new int[size]; 
    for (int i = 0; i < size; i++) 
    { 
     dataArray[i] = random.Next(1, 1000); 
    } 
} 

... ma essere consapevoli del fatto che gli array sono considered somewhat harmful.

+0

ero 1/2 attraverso la mia risposta quando ho notato questo. Questa è la migliore risposta. Inoltre, come alternativa, è possibile utilizzare ArrayList al posto dell'elenco . Tuttavia, l'elenco è la scelta migliore se solo gli interi stanno entrando nell'array. – galford13x

+0

Inoltre, quando si utilizza 'Lista ' spesso si può suggerire la capacità iniziale che rende più veloce l'aggiunta di elementi all'elenco. –

+0

ArrayList è altamente sconsigliato poiché abbiamo generici in .NET 2.0+. Boxing e Unboxing fanno di ArrayList una scelta sbagliata. –

1

È necessario inizializzare la matrice. Se vuoi qualcosa di dinamico, devi usare un oggetto List.

0
int[] dataArray= new int[10]; 
    Random random = new Random(); 
    for (int i = 0; i < random.Next(1, 10); i++) 
    { 
     dataArray[i] = random.Next(1, 1000); 
    } 
1

Sembra che sia necessario inizializzare il data array.

Do int[] dataArray = new int[10] anziché il solo codice presente nella prima riga del metodo.

dove 10 è la quantità di elementi con cui si avrà a che fare.

Se non si è sicuri della dimensione, starai meglio usando un ArrayList o, meglio ancora, un elenco.

+0

Nel suo caso, 10 sarebbe il numero * massimo * di elementi, poiché sta cercando di impostare la dimensione tra [1,10] – JeffH

0

Try This:

 Random random = new Random(); 
     int cnt = random.Next(1, 10); 
     int[] dataArray = new int[cnt]; 
     for (int i = 0; i < cnt; i++) 
     { 
      dataArray[i] = random.Next(1, 1000); 
     }