Entwickler-Ecke

C# - Die Sprache - List Problem


bd.cole - Mo 10.09.07 15:46
Titel: List Problem
Hallo ich habe mir eine Klasse erstellt:

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:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
public class Unit
        {

            List<Element> element = new List<Element>();

            public List<Element> Elemente
            {
                get { return element; }
                set { element = value; }
            }

            public Unit() { }
        }

        public class Element
        {
            Adresse adresse = new Adresse();
            public Adresse Adressen
            {
                get { return adresse; }
                set { adresse = value; }
            }

            Kommunikationen kommunikationen = new Kommunikationen();
            public Kommunikationen Kommunikation
            {
                get { return kommunikationen; }
                set { kommunikationen = value; }
            }
            private string simulation = String.Empty;
            public string Simulation
            {
                get { return simulation; }
                set { simulation = value; }
            }

            public Element() { }
       }


        public class Adresse
        {
            private string strasse = String.Empty;
            private string hausnummer = String.Empty;
            
            public string Strasse
            {
                get { return strasse; }
                set { strasse= value; }
            }

            public string Hausnummer
            {
                get { return hausnummer; }
                set { hausnummer= value; }
            }

            public Adresse() { }


        }

        public class Kommunikationen
        {
            
            private string telefon = String.Empty;
            private string internet = String.Empty;

            public string Telefon
            {
                get { return telefon; }
                set { telefon= value; }
            }
            public string Internet
            {
                get { return internet; }
                set { internet= value; }
            }
            public Kommunikationen() { }
        }

Ich weiß nicht, wie ich jetzt in die Liste etwas speichern soll. Also normal mach ich ja jetzt in der class Element einen Konstruktor mit:

C#-Quelltext
1:
2:
3:
4:
5:
6:
 
public Element(string adr, string kom, string sim)
{ kommunikation = kom;
  adresse = adr;
  simulation = sim;
}

Und speicher es dann in dem ich ein Objekt erstelle, z.B. myObject und dann speicher mit:

C#-Quelltext
1:
myObject.Element.Add(blubb, blabb, blibb);                    

Aber das würde ja nur gehen wenn adresse und kommunikation strings wären. Wie geht das jetzt, wenn es eben weitere Klassen sind? Ich hoff ich habe mich verständlich ausgedrückt

Mfg Cole


Christian S. - Mo 10.09.07 15:56

Vorweg etwas zu Deinen Klassen:

Du mischst bei den Begriffen immer Einzahl und Mehrzahl, das ist ein totales Durcheinander. Das solltest Du abändern.

Auch haben Properties für Listen normalerweise keinen Setter, weil man nur auf der bestehenden Instanz der Liste arbeiten soll. Generell solltest Du bei Properties, die keine Werttypen zurückliefern, überlegen, ob ein Setter sinnvoll ist oder ob nur Eigenschaften der vorhanden Instanz geändert werden sollen.

Zu Deinem Problem:

Einer Liste fügst Du vorher erstellte Instanzen hinzu:

C#-Quelltext
1:
2:
3:
4:
5:
Unit u = new Unit();
Element element = new Element(); //oder einen anderen Konstruktor, falls vorhanden
element .Adresse.Strasse = "Lindenstraße";
/*... usw. ... */
u.Elemente.Add(new Element(element));


bd.cole - Di 11.09.07 10:24

Hi danke erstmal, aber wenn ich das jetzt so mache, wie du beschrieben hast, dann ersetzt der immer alle straßen in der ganzen liste mit der zuletzt reingeschriebnenen. Also wenn wir von deinem Beispiel ausgehen, heißt jetzt jede straße in der Liste Lindenstraße, nciht nur die letzte


bd.cole - Di 11.09.07 10:34

Ah hatte das new Element bei .Add(new Element(element)) übersehen. Aber wie muss ich nur bei der Klasse Element den Konstruktor schreiben, dass er mir das so schluckt. Bis jetzt hab ich nur einen Konstruktor public Element(){}
Habs schon versucht mit public Element(Element ele){}, da kommt zwar kein fehler, aber schreibt auch nix in die Liste


Christian S. - Di 11.09.07 10:38

Am Besten schaust Du Dir mal ein paar Grundlagen an: http://www.galileocomputing.de/openbook/csharp/ ;-)