[C#] System.NullReferenceException bei List<>

07/08/2012 19:39 Terreox#1
Hallo
bin momentan nebenbei an einem Projekt in C# am arbeiten und habe ein Problem mit der Exception im Titel.
Folgendes versuche ich:

In dem Programm gibt es eine Personenverwaltung.
Ich habe eine Mutterklasse 'Entity'
Code:
class Entity
    {
        int id;
        string name;

        public virtual int getID()
        {
            return id;
        }

        public virtual string getName()
        {
            return name;
        }
    }
Daneben gibt es eine Kindklasse 'FireFighter'
Code:
class FireFighter : Entity
    {
        int id;
        string name;

        public FireFighter(int id, string name)
        {
            this.id = id;
            this.name = name;
        }

        public override int getID()
        {
            return id;
        }

        public override string getName()
        {
            return name;
        }
    }
Nun lasse ich das Clickevent von button1 eine neue Instanz von FireFighter erstellen.
Code:
private void button1_Click(object sender, RoutedEventArgs e)
        {
            FireFighter ff = new FireFighter(1, "XYZ");
            //...
        }
Es existiert nebenher noch ein EntityHandler der den Sinn haben soll, alle Entities zentral zu sammeln. Dieser EntityHandler besitzt eine List<Entity> und eine AddEntity(Entity entity) Methode
Code:
class EntityHandler
    {
        List<Entity> entities;

        public EntityHandler()
        {
        }

        public void AddEntity(Entity entity)
        {
            if(!entities.Contains(entity))
                entities.Add(entity);
        }
    }
Ich habe nun versucht direkt nach der Instanziierung, den FireFighter per
Code:
entityHandler.AddEntity(ff);
zu registrieren.

Bei diesem Versuch schmeißt das Programm die Exception. Ich frage mich nur warum? Ich habe eine List<Entity> und übergebe der Funktion einen Nachfahre von Entity. Nach der negativer Überprüfung, ob das übergebene Entity bereits in der List<Entity> vorhanden ist, möchte ich das Entity dann nur in die Liste eintragen. Ich habe eine existierende Instanz von FireFighter... Die Fehlermeldung verstehe ich so, als ob ich gar keine existierende Instanz von Entity übergebe?

Kann mir das nicht so ganz erklären... Vielleicht fehlt mir auch einfach die Routine mit C# und ich habe einen Denkfehler in der Umsetzung des Problems.
Wäre nett, wenn mir jemand von euch weiterhelfen könnte.

Greetz
Terreox
07/08/2012 19:44 nkkk#2
vermutlich weil deine List<Entity> entities null ist,
Code:
entities = new List<Entity>();
im konstruktor behebt dann das problem
07/08/2012 19:49 Terreox#3
Ok vielen Dank da habe ich wohl etwas bei den C# Tutorials falsch verstanden, die ich geschaut habe. Hab verstanden, dass C# seine Attribute automatisch erzeugt.

Viele Dank es funktioniert :)
07/08/2012 20:04 MoepMeep#4
Quote:
Originally Posted by Terreox View Post
Ok vielen Dank da habe ich wohl etwas bei den C# Tutorials falsch verstanden, die ich geschaut habe. Hab verstanden, dass C# seine Attribute automatisch erzeugt.

Viele Dank es funktioniert :)
Das objekt gibt es ja, es ist nur nicht initialisiert und deshalb null ;)