Entwickler-Ecke
Basistechnologien - Ich komme mit der set-methode nicht klar... :-(
WSS-130 - Di 22.01.13 17:43
Titel: Ich komme mit der set-methode nicht klar... :-(
Hallo ;-)
ich habe in meiner GUI eine taste die eiene Liste von Listen erstellen soll.
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:
| class Form { List<datenbank> daten = new List<datenbank>(); private void button_press(....) { string kanal = "das ist meine kanal"; ?????????????? } }
class datenbank { List<string> kanal = new List<string>();
public datenbank(List<string> kanal) { this.kanal=kanal; }
public List<string> callKanal { get { return kanal; } set {kanal = value; } } } |
So und nun mächte ich nach drücken der Taste button_press den kanal in die Liste daten schreiben....
Das sollte doch eigentlic hmit einem Befehl bei den ????????????? wie
gehen, oder?
Viele Grüße udn schonmal danke für die Hilfe :-)
Palladin007 - Di 22.01.13 17:53
Der set-Accessor ist ein Teil einer Eigenschaft und eine Eigenschaft ist seinerseits wieder Teil eines Objektes.
Du kannst die Eigenschaft nur verwenden, wenn du auch ein Objekt hast, dessen Eigenschaft du abrufen kannst.
C#-Quelltext
1: 2:
| datenbank dbank = new datenbank(kanal); daten.Add(dbank); |
Ach und sei so gut, füge doch bitte die fehlenden Klammern ein, denn so, wie du das da geschrieben hast, wirst du nie auf einen grünen Zweig kommen. ^^
Ralf Jansen - Di 22.01.13 17:59
Der solltest insbesondere das Beachten was die der Compiler als Fehler rauswirft. Der wird dir bei der Zeile
daten.Add(callKanal)
gesagt haben das eine List<string> ein anderer Typ ist als datenbank. Und deine daten Liste verwaltet nun mal datenbank Objekte und nicht List<string> was du versuchst der Liste hinzuzufügen.
WSS-130 - Mi 23.01.13 11:09
@Palladin007 du hast natürlich recht. Ich habe den Code hier kurz von Hand reingeschrieben und einige Klammern vergessen. Hab das mal verbessert.
Und auch dein einwand hat mir weitergeholfen. Klar muss ich das Objekt erstellen bevor ich "Daten" darin setzen kann.
Ich hab jetzt mal das Programm angehängt. Das Programm soll aus einer Liste "paths" (Liste mit Dateipfaden) die Dateien sortieren und in eine Liste sortieren in der nur diese Dateitypen enthalten sind.
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:
| class Form { List<string> paths = new List<string>(); List<dataset> data = new List<dataset>();
private void button_add_Click(object sender, EventArgs e) { string filename = "Test";
foreach (string path in paths) { List<string> pathTxt = new List<string>();
dataset dataTxt = new dataset(pstname, pathTxt);
if (path.EndsWith(".txt")) { dataTxt.callPathTxt.Add(path); } } dataMap.callFilename = filename; data.Add(dataTxt); paths.Clear(); } }
public class dataset { string filename; List<string> pathTxt = new List<string>();
public dataset(string filename, List<string> pathTxt) { this.filename = filename; this.pathTxt = pathTxt; } public string callFilename { get { return filename; } set { filename = value; } } public List<string> callPathTxt { get { return pathTxt; } set { pathTxt = value; } } } |
Das Hinzufügen funktioniert soweit ich das mit dem Debugger nachvollziehen kann... Allerdings bleibt die Liste "data" leer.
Und ich kann mit dem Debugger den "set" nicht verfolgen. Heißt, der Befehl "dataTxt.callPathTxt.Add(path);" wird zwar wohl ausgführt ich komme aber dann nicht mit dem Debugger in meine Klasse dataset?
in ich auf dem richtigen Weg? Oder was mache ich denn falsch?
Ralf Jansen - Mi 23.01.13 11:51
Zitat: |
Allerdings bleibt die Liste "data" leer. |
Im gezeigten Code wird data auch nur erzeugt aber nie benutzt. Dein Code sieht auch immer noch merkwürdig oder unvollständig aus. Einen else Befehl ohne dazugehörenden if gibt es nicht. Wolltest du im Code noch irgendwo dataTxt der data Liste hinzufügen? So wie dein Code jetzt ist wird ein dataTxt bei jedem Schleifendurchlauf erzeugt, gefüllt und am Ende des Durchlaufs zerstört ohne das da was mit passiert.
Zitat: |
Und ich kann mit dem Debugger den "set" nicht verfolgen |
Standardmäßig überspringt VS Properties beim debuggen. Das Verhalten kannst du in 'Tools/Options/Debugging/Step over Properties and Operators' ändern.
WSS-130 - Mi 23.01.13 12:14
Zitat: |
Im gezeigten Code wird data auch nur erzeugt aber nie benutzt. ... Wolltest du im Code noch irgendwo dataTxt der data Liste hinzufügen? So wie dein Code jetzt ist wird ein dataTxt bei jedem Schleifendurchlauf erzeugt, gefüllt und am Ende des Durchlaufs zerstört ohne das da was mit passiert. |
Danke Ralf!!! :-D Und ich wunder mich warum nie was in data geschreiben wird :-D... klar wird das nicht ohne Add.
Die anderen "Kleinigkeiten" die du angesprochen hast sind reine copy paste Fehler... Die Probleme hatee ich im Compiler nicht.
Ich hab das jetzt alles mal im Code meines letzten Posts editiert.
Zitat: |
Zitat: | Und ich kann mit dem Debugger den "set" nicht verfolgen |
Standardmäßig überspringt VS Properties beim debuggen. Das Verhalten kannst du in 'Tools/Options/Debugging/Step over Properties and Operators' ändern. |
Okay das versuch ich gleich mal!
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!