Entwickler-Ecke
Basistechnologien - ArrayList und Objekt referenzen
foxy - Mo 21.07.08 14:41
Titel: ArrayList und Objekt referenzen
Hallo Leute,
hätte da mal eine Frage bezüglich ArrayListen.
Das ganze ist eine Applicatioen für ein PDA.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| User user; ArrayList list = new ArrayList(); for (int i = 0; i< 100;i++) { user = new User(x,y,z); list.add(user); } |
das ist nur ein vereinfachtes Beispiel, aber im grunde macht es genau das was ich brauche, es legt eine Objekt referenz in eine arrayliste.
Aber nachdem ich nun beim 2. durchlauf bin und will nun die liste per debug kontrollieren, geht alles schieff. Bei jedem versuch auf den Inhalt der Liste zu zugreifen, welche objekte nun darin enthalten sind (es sind objekte enthalten) bricht er ab. Keine fehlermeldung nichts. Immer wenn ich auf den Inhalt der objekte zugreifen will.
Kann es sein, das er die referenz nicht sauber da rein schreibt ?
gruss
edit:
bei weiteren debugs, habe ich nun festegestellt, das der fehler schon in der erstellung des Objektes liegt.
der vollständige code sieht so aus ich entdecke einfach den fehler nicht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| User user; Markt markt; ArrayList list = new ArrayList(); marktgebuehr_update markt_u = new marktgebuehr_update(); XmlElement root = GetResponseDom(markt_u.getKatalog(methode));
foreach (XmlNode @data in root[methode].ChildNodes) { if (methode.Equals("benutzer")) { user = new User(@data["loginname"].InnerText, @data["pwd_md5"].InnerText, Convert.ToInt32(@data["id"].InnerText)); MessageBox.Show(user.uLoginName.ToString()); list.Add(user); } else { markt = new Markt(Convert.ToInt32(@data["id"].InnerText), @data["name"].InnerText, Convert.ToDouble(@data["preis"].InnerText)); list.Add(markt); } } |
Christian S. - Mo 21.07.08 14:54
Irgendwie kann ich jetzt nicht erkennen, wo in Deinem "großen" Quelltext nun welcher Fehler kommt :gruebel:
Aber eines kann ich Dir sagen: Die ArrayList ist veraltet, stammt noch aus .NET 1.1. Seit .NET 2.0 gibt es als Ersatz die generische List<T>. Die spart Dir hinterher viel rum-gecaste.
foxy - Mo 21.07.08 15:02
ach nach der habe ich schon gesucht :D
hab schon gedacht c# hätte sowas nicht :>
aber zu dem problem: Also ich kann mir das auch nicht erklären.
Der erstellt mir einfach kein User Objekt -.-
edit:
ich hab das ganze mal abgefangen, also die exceptions und da spuckt er mir ein stackoverflow aus °°
woher kommt das denn °°
Christian S. - Mo 21.07.08 15:04
Dann setz doch mal einen Haltepunkt im Konstruktor der User-Klasse und schau, wo es knallt :-)
foxy - Mo 21.07.08 15:12
Also es knallt direkt nach der ersten zuweisung der Variablen...
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| class User { private string loginName, pw; private int id;
public User(string loginName, string pw, int id) { this.id = id; this.pw = pw; this.loginName = loginName; }
public int uID { get { return this.id; } set { this.id = value; } }
public string uLoginName { get { return this.uLoginName; } set { this.uLoginName = value; } }
public string upw { get { return this.pw; } set { this.pw = value; } }
} |
Also die übergabe Parameter sind korrekt auch mit werten gefüllt und die richtigen Typen.
Also das Objekt erstellen kann ich ... wenn ich teste mit festen werten gehts ...
Christian S. - Mo 21.07.08 15:14
Und @data["id"].InnerText enthält auch einen gültigen Int32, sodass Convert.ToInt32 keine Exception wirft?
foxy - Mo 21.07.08 15:17
nein wirft keine exception.
Aber bin weiter am debuggen und habe nun festegestellt, das er absolut kein objekt von der klasse user erstellt auch nicht mit festen werten.
Bei einem test
C#-Quelltext
1: 2:
| User user1 = new User("test","test2",1); MessageBox.Show(user1.uLoginName.toString()); |
crasht er ebenfalls -.- stack overflow exception
Christian S. - Mo 21.07.08 15:21
So, hab's jetzt mal bei mir ausprobiert. Der Fehler ist eigentlich ganz eindeutig. ;)
Der Getter von uLoginName liest uLoginName liest uLoginName liest uLoginName ........
Man benutzt übrigens in C# keine Prefixe wie "u". Höchstens für private Felder mal ein "_", aber nicht für Properties.
//edit: Satzreihenfolge korrigiert ;-)
foxy - Mo 21.07.08 15:25
na geil :> ja super denke das wird er wohl gewesen sein
dank dir ... da hätt ich noch stunden gesucht :>
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!