Problem mit Größe eines Arrays



  • Hallöchen,

    ich habe ein Problem mit einem Array, dem ich eine Größe zuweisen will anhand von der Anzahl x Spalten.

    DataTable dt = new DataTable();
    //bissel Code, indem eine Excel Datei ins dt gelesen wird
    string []titles = new string[dt.Columns.Count]; // hier ist das Problem
    
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    titles[i] = dt.Columns[i].ToString();
                }
    

    Nun das Problem sieht wie folgt aus:
    ausgewählte Excel-Datei hat 14 Spalten, also: dt.Columns.Count = 14
    titles[] Größe beträgt aber grundsätzlich nur 13, selbst wenn ich es mit 20 oder 200 initialisiere.

    Ich habe das Programm und den Lappi neu gestartet, da ich damals schonmal solch ein Problem dadurch lösen konnte, nur diesmal hilft nichts 😕

    Schöne Größe,

    Stryke



  • xStrykex schrieb:

    titles[] Größe beträgt aber grundsätzlich nur 13

    Und woraus folgerst du das?



  • Dass, egal wie groß ich titles[] initialisiere, bei der folgenden Schleife die Fehlermeldung kommt, dass der Index außerhalb des Bereichs (>13) liegt.



  • Reicht doch für die 14 Spalten? Wie "initialisierst" du es denn mit 20 oder 200? Eventuell machst du da was falsch?



  • Vielleicht habe ich mich falsch ausgedrückt 😕

    Also, ich möchte die Spaltennamen eines DataTables in ein Array packen, angenommen es gibt 20 Spalten.

    string []titles = new string[dt.Columns.Count]; //so müsste titles[20]
    
                for (int i = 0; i <= dt.Columns.Count; i++)
                {
                    titles[i] = dt.Columns[i].ToString(); // hier kommt Fehlermeldung, dass Größe des Array´s überschritten wird, da titles[13]
                }
    

    ich könnte es auch direkt mit einem Wert initialisieren mit

    string []titles = new string[50];
    //oder
    string []titles = new string[1000];
    

    Die Fehlermeldung ist immer dieselbe...

    Könnte es sein, dass mein MSVS2012 irgendeine Macke bekommen hat?
    Zusätzliche Info: vor einer guten Stunde hat es noch wunderbar funktioniert, nach einem debug nicht mehr.
    (Grade getestet im selbigen und anderen Programmen) Auch alle anderen Array´s haben nur eine Größe von 13 😞



  • Zeig mal ein Minimalbeispiel, das das Problem reproduziert.



  • xStrykex schrieb:

    for (int i = 0; i <= dt.Columns.Count; i++)
    

    Das <= ist das Problem, deine Schleife geht einen Schritt zu weit, ändere es in <.

    Das war im Ursprungsposting noch ein <. Merk dir fürs nächste Mal: IMMER Originalcode per Copy&Paste posten, niemals abtippen oder irgendwas sinngemäß entsprechendes o.ä.

    titles[i] = dt.Columns[i].ToString(); // hier kommt Fehlermeldung, dass Größe des Array´s überschritten wird, da titles[13]
    

    Fürs nächste mal: Du solltest die Fehlermeldung per Copy&Paste posten. Vielleicht würde daraus hervorgehen, dass der ungültige Zugriff nicht bei titles, sondern bei dt.Columns auftritt.



  • Bashar schrieb:

    Das <= ist das Problem, deine Schleife geht einen Schritt zu weit, ändere es in <.

    Ja, da hast Du recht, aber das behebt den Fehler noch immer nicht.

    Die Fehlermeldung:

    Eine nicht behandelte Ausnahme des Typs "System.IndexOutOfRangeException" ist in DGV.exe aufgetreten.

    Zusätzliche Informationen: Der Index war außerhalb des Arraybereichs.

    @MFK:

    int[] zahlen = new int[20];
                for (int i = 0; i < 20; i++)
                {
                    zahlen[i] = i;
                }
    

    Ich habe den Part bei mir im Code jetzt auskommentiert, doch die Fehlermeldung(s.o.) kommt wieder an derselben Stelle 😮 😕
    Nun versteh ich wirklich gar nichts mehr...

    //string []titles = new string[dt.Columns.Count];
    
                //for (int i = 0; i < dt.Columns.Count; i++)
                //{
                //    titles[i] = dt.Columns[i].ToString(); // trotz auskommentierung hier Fehlermeldung!!!
                //}
    


  • Sicher, dass das Executable neu gebaut wurde? Evtl zwischen Debug und Release gewechselt?



  • oenone schrieb:

    Sicher, dass das Executable neu gebaut wurde? Evtl zwischen Debug und Release gewechselt?

    Es stand nach wie vor auf Debug 😕

    Nunja, ich habe jetzt den gesamten Code per C&P in ein neues Projekt eingefügt und es funktioniert alles wie vorher.

    Wäre das Problem soweit erstmal gelöst, aber interessieren tut mich dennoch:
    Woran konnte das liegen? Hat das Projekt in dem der Fehler aufgetreten ist irgendeinen Schaden genommen?


Anmelden zum Antworten