Problem mit verschachtelter Liste



  • Hallo,

    ich beschäftige mich momentan mit C# und bin gerade dabei Daten aus einer Access-Datenbank zu holen. Bisher hatte ich damit keine Probleme, aber seit vorgestern hänge ich an einem Problem, und komme auch nicht weiter obwohl ich mich gestern mal mit was anderem beschäftigt habe und ein wenig Abstand zu gewinnen. Ich hoffe hier kann mir jemand einen Hinweis geben.

    Mein Code sieht folgendermaßen aus:

    List<List<string>> playerList = new List<List<string>>(150);
    List<string> playerData = new List<string>(31);
    
    query.CommandText = "SELECT " +
                            "ID, Forename, Surename, Age, " +
                            "Height, Weight, Position " +
                         "FROM " +
                            "Player " +
                         "WHERE " +
                            "Team = 'FA' ";
    
    using (OleDbDataReader reader = query.ExecuteReader())
    {
        while (reader.Read())
        {
            if (playerData.Count != 0)
            {
                playerData.Clear();
            }
    
            for (int i = 0; i < 31; i++)
            {
                playerData.Add(reader[i].ToString());
    
                // Hier sind die Daten des readers korrekt, und stimmen mit denen überein die der "playerData" Liste hinzugefügt wurden.
                // Beispiel: reader[0] -> 68, playerData[0] -> 68
            }
    
            playerList.Add(playerData);
    
            // Hier sind die Daten in playerData immer noch korrekt, und stimmen mit denen überein die der "playerList" Liste hinzugefügt wurden.
            // Beispiel: reader[0] -> 68, playerData[0] -> 68, playerList[0][0] -> 68
        }
    }
    
    // Hier enthält playerList 150 mal den gleichen Spieler.  :confused: 
    // Beispiel: playerList[0][0] -> 624, playerList[100][0] -> 624
    


  • Hint: Bei playerList.Add(playerData); ist playerData immer dasselbe Objekt!

    Außer bei Werttypen (int, double, etc.) wird bei Funktionsparametern immer eine Kopie der REFERENZ übergeben und nicht eine Kopie des Objekts!
    D.h. du packst immer das playerData-Objekt das du ganz oben einmal erzeugt hast in die Liste.



  • Vielen Dank, jetzt funktioniert es so wie es soll. Da habe ich wohl eine sehr große Lücke bei den Grundlagen, wenn ich nichtmal so etwas - in meinem Fall zumindest - triviales entdecke.


Anmelden zum Antworten