Laden...

InvalidCastException - Umwandlung in Unterklassenobjekt geht nicht

Erstellt von Animal21 vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.140 Views
A
Animal21 Themenstarter:in
144 Beiträge seit 2008
vor 13 Jahren
InvalidCastException - Umwandlung in Unterklassenobjekt geht nicht

Hallo leute,
ich hab folgenden Sachverhalt:
Gamer
<---Human
<---NPC
also die Klassen "Human" und "NPC" erben von der Klasse "Gamer".
Beim erstellen eines Spiels gibt es ein Dictonary<int, Gamer> gamerList.
Dieses Dictonary soll je nach Auswahl mit "Human"-Spielern und "NPC"-Spieler gefüllt werden:


            Gamer g = new Gamer(..., ..., ...);
            if(bNPC) gamerList.Add(g.ID, (NPC)g);
            else gamerList.Add(g.ID, (Human)g);

,aber der cast funktioniert iwie nicht, der Compiler sagt mir:

Das Objekt des Typs "Gamer" kann nicht in Typ "Human" umgewandelt werden.

mfg
ani

U
1.688 Beiträge seit 2007
vor 13 Jahren

,aber der cast funktioniert iwie nicht, der Compiler sagt mir:

Das Objekt des Typs "Gamer" kann nicht in Typ "Human" umgewandelt werden.

Wie lautet Deine Frage? Die Fehlermeldung ist doch eindeutig. Wenn Du einen "Gamer" erzeugst, ist das kein "Human" und kein "NPC" - also kannst Du die auch nicht umwandeln.

s. auch [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)

A
Animal21 Themenstarter:in
144 Beiträge seit 2008
vor 13 Jahren

aber "Human" und "NPC" erben doch von "Gamer"
sollte es da nicht möglich sein einen Gamer in ein "Human" oder "NPC" umzuwandeln?


        object o = "Test";
        string s = (string)o;

U
1.688 Beiträge seit 2007
vor 13 Jahren

aber "Human" und "NPC" erben doch von "Gamer"

Was ist denn der erzeugte "Gamer"? "Human" oder "NPC"? Weder noch - es ist einfach ein "Gamer".

Was Du machen kannst, ist einen "Human" bzw. einen "NPC" zu erzeugen und diese als "Gamer" behandeln.

Bitte eigne Dir dringend die nötigen Grundlagen an, z. B. aus 🛈 (Stichwort Vererbung).

771 Beiträge seit 2009
vor 13 Jahren

Hi Animal,

wenn dann sollte dein Code doch eher so aussehen:


Gamer g;
if(bNPC)
   g = new NPC(...);
else
   g = new Human(...);

gamerList.Add(g.ID, g);

A
Animal21 Themenstarter:in
144 Beiträge seit 2008
vor 13 Jahren

danke @cat, so wollt ichs eigentlich

mfg
ani