Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Problemi con List<>
Forum - C# / VB.NET - Problemi con List<>

Avatar
lupetto77 (Normal User)
Pro


Messaggi: 75
Iscritto: 04/12/2011

Segnala al moderatore
Postato alle 1:35
Sabato, 24/10/2015
Ciao a tutti volevo farvi una domanda per capire dove sbaglio.

Ho questa classe:
Codice sorgente - presumibilmente C#

  1. public class Esempio
  2. {
  3.    public List<string> _lista = new List<string>();
  4.  
  5.    public void File(string path)
  6.    {
  7.       // Faccio vari controlli....
  8.       FileRisorse(Properties.Resources.FileNelleRisorse);
  9.    }
  10.  
  11.    private void FileRisorse(string pathRisorse)
  12.    {
  13.         string[] letto = pathRisorse.Split('\n');
  14.         foreach (string rigaLetta in letto)
  15.         {
  16.             _lista.Add(rigaLetta);
  17.         }
  18.     }
  19. }



E nel Form1

Codice sorgente - presumibilmente C++

  1. private void TestoLabel()
  2.      {
  3.          Esempio leggi = new Esempio();
  4.          label3.Text = leggi._lista[0];
  5.          label4.Text = leggi._lista[1];
  6.      }
  7.  
  8.      private void Form1_Load(object sender, EventArgs e)
  9.      {
  10.          Esempio leggi = new Esempio();
  11.          leggi.File("Test.txt");
  12.  
  13.          TestoLabel();
  14.      }



Non capisco perchè mi solleva un eccezione System.ArgumentOutOfRangeException sulla riga;
label3.Text = leggi._lista[0];

ma se copio il codice e lo metto nel Form1 in questo modo:

Codice sorgente - presumibilmente C#

  1. List<string> _lista = new List<string>();
  2.    
  3.      private void TestoLabel()
  4.      {
  5.          //Esempio leggi = new Esempio();
  6.          label3.Text = _lista[0];
  7.          label4.Text = _lista[1];
  8.      }
  9.  
  10.      private void FileRisorse(string pathRisorse)
  11.      {
  12.          string[] letto = pathRisorse.Split('\n');
  13.          foreach (string rigaLetta in letto)
  14.          {
  15.              _lista.Add(rigaLetta);
  16.          }
  17.      }
  18.  
  19.      private void Form1_Load(object sender, EventArgs e)
  20.      {
  21.          //Esempio leggi = new Esempio();
  22.          FileRisorse(Properties.Resources.FileNelleRisorse);
  23.  
  24.          TestoLabel();
  25.      }



Funziona tutto correttamente, come mai?

Ultima modifica effettuata da lupetto77 il 24/10/2015 alle 15:41


Lupetto77
PM Quote
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 9:37
Sabato, 24/10/2015
Il problema è qui
Codice sorgente - presumibilmente C# / VB.NET

  1. private void TestoLabel()
  2.      {
  3.          Esempio leggi = new Esempio();
  4.          label3.Text = leggi._lista[0];
  5.          label4.Text = leggi._lista[1];
  6.      }


perchè stai inizializzando una nuova istanza della classe Esempio, e stai provando a leggere dati da _lista prima di averceli caricati. Potresti risolvere dichiarando "leggi" globalmente, inizializzandolo nell'evento load e poi accedervi da TestoLabel:
Codice sorgente - presumibilmente C++

  1. //Sotto la dichiarazione della classe form1
  2. Esempio leggi;
  3. //eventuali altri oggetti globali e/o metodi
  4. private void TestoLabel()
  5.      {
  6.          label3.Text = leggi._lista[0];
  7.          label4.Text = leggi._lista[1];
  8.      }
  9.  
  10.      private void Form1_Load(object sender, EventArgs e)
  11.      {
  12.          leggi = new Esempio();
  13.          leggi.File("Test.txt");
  14.  
  15.          TestoLabel();
  16.      }



PM Quote
Avatar
lupetto77 (Normal User)
Pro


Messaggi: 75
Iscritto: 04/12/2011

Segnala al moderatore
Postato alle 15:48
Sabato, 24/10/2015
Grazie GN hai perfettamente ragione era quello il problema grazie ancora :k:


Lupetto77
PM Quote