Problem mit List<T> "



  • Hallo,

    ich habe eine kleine Klasse geschrieben, die mir Daten aus einer CSV Datei auslesen soll.

    Die CSV Datei:

    Zeile 1 a; Zeile 1 b; Zeile 1 c
    Zeile 2 a; Zeile 2 b; Zeile 2 c

    Die einzelen Zeilen werden in einem string Array gesplittet.

    public class CsvReader
        {
            public List<string[]> _userDataList { private set; get; }
    
            public CsvReader(string filePath)
            {
                createUserDataList(filePath);
            }
    
            private void createUserDataList(string filePath)
            {
                string[] lines = File.ReadAllLines(filePath, Encoding.Default);
    
                foreach (string line in lines)
                {
                    string[] userData = line.Split(';');
                    this._userDataList.Add(userData);
                }
            }
        }
    

    Wenn ich jetzt eine Instanz von CsvReader erstelle

    CsvReader cr = new CsvReader("test.txt");
    

    erhalte ich eine "System.NullReferenceExecption"... Warum?



  • _userDataList == null also kracht es bei _userDataList.Add.

    Beschäftige Dich mit dem Debugger. Solche Probleme muss man selbst beheben können.



  • Ich würde noch weiter gehen und sagen, solche Probleme muss man erkennen und beheben, ohne den Debugger zu brauchen.



  • GPC schrieb:

    Ich würde noch weiter gehen und sagen, solche Probleme muss man erkennen und beheben, ohne den Debugger zu brauchen.

    Hm... schon mal drüber nachgedacht, dass ich ein Anfänger bin. Ich bring mir das alles selbst bei und ab und an hängts einfach an dem Verständnis.



  • Blacky666 schrieb:

    Hm... schon mal drüber nachgedacht, dass ich ein Anfänger bin. Ich bring mir das alles selbst bei und ab und an hängts einfach an dem Verständnis.

    Ich sagte auch nicht, dass man dies als Anfänger sehen muss... das kommt erst mit der Zeit. Aber es ist so: NullReferenceException kann nur bei Referenztypen auftreten. Dass es in .NET Wert- und Referenztypen gibt, weißt du bestimmt. Die Unterschiede solltest du auch kennen. Damit kommt man dem Problemherd ruck zuck auf die Spur.



  • GPC schrieb:

    Blacky666 schrieb:

    Hm... schon mal drüber nachgedacht, dass ich ein Anfänger bin. Ich bring mir das alles selbst bei und ab und an hängts einfach an dem Verständnis.

    Ich sagte auch nicht, dass man dies als Anfänger sehen muss... das kommt erst mit der Zeit. Aber es ist so: NullReferenceException kann nur bei Referenztypen auftreten. Dass es in .NET Wert- und Referenztypen gibt, weißt du bestimmt. Die Unterschiede solltest du auch kennen. Damit kommt man dem Problemherd ruck zuck auf die Spur.

    Also die Unterschiede kenne ich, aber ich habe öfters Probleme den Problemherd zu finden. Ich habe gedacht, dass wenn ich

    public List<string[]> _userDataList { private set; get; }
    

    schreibe, dass ich mir

    _userDataList = new List<string[]>();
    

    ersparen kann.



  • Eine Property ist hinter den Kulissen auch nur eine normale Membervariable der Klasse 😉 Insofern gelten auch dafür die gleichen Regeln als für normale Member 🙂
    Bzgl. Problemherd finden: Eine NullReferenceException kann nur beim Zugriff auf einen Member eines Referenztyps fliegen. Insofern kannst du da gezielt danach Ausschau halten. In der Regel kann man sowas natürlich auch locker debuggen, aber ich habe es mir angewöhnt, .NET-Code mit potentiellen NullReferenceExceptions im Hinterkopf zu lesen.


Anmelden zum Antworten