Laden...

Wieso klappt das Casten hier nicht?

Erstellt von Slaya23 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.341 Views
S
Slaya23 Themenstarter:in
35 Beiträge seit 2009
vor 14 Jahren
Wieso klappt das Casten hier nicht?

Hi 😃

also bei mir kommt immer eine Fehler beim Casten und läuft das so ab:

Ich packe meine Zahl erst in ein Object Array

        public void neueReihe(int TableID, int Staffel, int Folge)
        {
            Object[] obj = new Object[3];
            obj[0] = Staffel; //Staffel
            obj[1] = Folge; //Folge
[...]
}

dann wird das Object benutzt um eine neue Reihe in meinm DataSet zu erstellen.

dataSet1.Tables[TableID].Rows.Add(obj);

So jetzt wird das ganze in eine Xml gespeichert. Ein anderes Programm von mir füllt sein DataSet jetzt wieder mit den daten aus dieser Xml.
Und dann kommt es:

for (int i = 1; i <= (int) dataSet1.Tables[0].Rows[reihen - 1].ItemArray[0]; i++)

😕 da knallts. Wo steckt denn der Fehler? Wieso is meine Zahl keine Zahl mehr o.O

Gelöst hab ich das Problem so, aber würde mich trotzdem interessieren.

for (int i = 1; i <= int.Parse(dataSet1.Tables[0].Rows[reihen - 1].ItemArray[0].ToString()); i++)
1.002 Beiträge seit 2007
vor 14 Jahren

Hallo slaya23,

ich würde vermuten, dass der Punkt-Operator eine geringere Priorität als der Cast hat.
Bei deiner Lösung wird das Argument der Cast-Methode wirklich zu dem, was du beabsichtigt hast.

Bitte beachte, dass es mittlerweile nach 23:00 ist, daher ist die Lösung bzw. der Lösungsvorschlag ungetestet 😉 ...

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

U
1.688 Beiträge seit 2007
vor 14 Jahren

Hallo Slaya23,

So jetzt wird das ganze in eine Xml gespeichert. Ein anderes Programm von mir füllt sein DataSet jetzt wieder mit den daten aus dieser Xml.

Dann sind doch die Typen von Deinem DataSet abhängig, oder?

for (int i = 1; i <= (int) dataSet1.Tables[0].Rows[reihen - 1].ItemArray[0]; i++)  

Du könntest Dir auch den tatsächlichen Typ im Debugger anzeigen lassen... Wie genau sieht denn die Exception aus, die Du bekommst? [Hinweis] Wie poste ich richtig? Punkt 5

Hallo m0rius,

cast hat eine geringere Priorität als die Member-Auswahl.

S
Slaya23 Themenstarter:in
35 Beiträge seit 2009
vor 14 Jahren

🙂 danke euch beiden für die Antworten.

Wie genau sieht denn die Exception aus, die Du bekommst?

System.InvalidCastException wurde nicht behandelt.
Message="Die angegebene Umwandlung ist ungültig."

label2.Text = dataSet1.Tables[0].Rows[reihen - 1].ItemArray[0].GetType().ToString();

// Zeigt 'System.String' an

Du hast die Lösung aber auch schon genannt.

Dann sind doch die Typen von Deinem DataSet abhängig, oder?

Wusste nicht, dass ich das umstellen kann. Dachte das DataSet erkennt was es ist und stellt sich darauf ein. =)
Habs umgestellt auf Int32 und jetzt geht's! Danke!!!

S
443 Beiträge seit 2008
vor 14 Jahren

Ich hab jetzt nicht alles gelesen, aber ich glaube, int.Parse() erwartet einen string, aber ItemArray[0] liefert ein object, d.h. ToString() macht aus dem object einen string und somit hängt es das Parse nicht mehr aus.

Auch wenn, wie in Deinem letzten Post eh ein string drinn steht, dieser string wird als object weiter gegeben.
Weiters würd ich, wenn ich mir sicher bin dass ein string drin steht, nicht .ToString verwenden, sondern einen hardcast (string)bla.ItemArray[0] schreiben.
Wenn der DatenTyp der in ItemArray[0] die ToString methode von System.Object NICHT überschreibt wird diese jene aufgerufen und da kommt ItemArray[0].GetType().Name raus und nicht der Value von ItemArray[0].

soweit mein Wissen, ist aber nicht festgenagelt.

mbg
Rossegger Robert
mehr fragen mehr wissen

Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen