2012-04-08 3 views
1

Moment habe ich eine Liste von benutzerdefinierten TypAcessing String-Parameter Daten aus einer Liste der Typ Klasse

Eg: List<CustomDataType> myList = new List<CustomDataType>(); 

Seine Datentyp ist eine Klasse. Jede dieser in der Liste gespeicherten Klassen enthält Unterklassen, die zusätzliche überladene Parameter sowie die Basisklassenparameter enthalten.

Eg(general form): CustomDataType listItem = new Subclass(data1, data2, data3, overloadedData1, overloadedData2) etc... 
myList.Add(listItem); 

Nach der Erstellung, muss ich Sie aus der Liste in den Daten jedes Elements nehmen und es als eine Zeichenfolge in einer Textdatei Dazu speichere ich eine foreach-Schleife eingerichtet haben

foreach (CustomDataType listNum in myList) 
    { 
     //Code to extract data goes here here 



     //Should have all of the class data in a string to be ready for writing 
     txtFile.WriteLine(theDataFromClass) 


    } 

txtFile.Close(); 

Ich brauche auch alle Daten innerhalb des Listenelements, um in eine Zeichenkette umgewandelt zu werden, damit es in der Datei richtig notiert werden kann.

Wenn etwas unklar ist, ich würde gerne den Quellcode geben, obwohl für diese Gelegenheit habe ich es in einem allgemeinen Format

PS gibt es tatsächlich Daten neu zu schreiben wollte richtig zugeordnet werden. Meine Frage besteht darin, auf diese Daten zugreifen zu können.

Ich hoffe alles ist klar!

Antwort

1

Ich brauche auch alle Daten innerhalb des Listenelements in Zeichenfolge umgewandelt werden, so dass es ordnungsgemäß in der Datei geschrieben werden kann.

Sie müssen also eine Methode schreiben, die genau das tut. Es gibt eine Reihe von Möglichkeiten, um Dinge in Strings zu konvertieren - Sie müssen den Code schreiben, um es zu tun, möglicherweise innerhalb CustomDataType. Sie können ToString überschreiben oder eine andere virtuelle Methode erstellen, die in Unterklassen überschrieben wird. Beachten Sie Folgendes: Wenn Sie erwarten, das Ergebnis analysieren zu können, müssen Sie möglicherweise daran denken, einige Elemente der Daten zu umgehen.

Wenn Sie nur mit der Textdatei zum Serialisieren und Deserialisieren der Daten verwenden, sollten Sie die XML-Serialisierung oder JSON-Serialisierung in Erwägung ziehen, anstatt sie manuell auszuführen.

(Kleine Anmerkung: Ich denke, Sie meinen, dass die verschiedenen Klassen enthalten Felder oder vielleicht Eigenschaften - nur ein Methode oder Indexer einen Parameter erklärt.)

+0

(Kleine Anmerkung: Ich denke, Sie meinen, dass die verschiedenen Klassen mit * gekennzeichneten Felder enthalten * oder vielleicht * Eigenschaften * - nur eine * Methode * oder Indexer deklariert einen Parameter.) Sie enthalten tatsächlich Parameter.Ich erstelle die Hauptklasse mit allgemeinen Parametern und die Unterklassen sind mit der Basisklasse verknüpft (enthält also die ursprünglichen Parameter + spezifische Parameter) Hier ist ein Beispiel 'public MainClass (Zeichenkette data1, Zeichenkette data2, Zeichenkette data3)' Eine Unterklasse würde enthalten: 'öffentliche SubClass (Zeichenfolge data1, Zeichenfolge data2, Zeichenfolge data3, Zeichenfolge customData1, Zeichenfolge customData2): Basis data1, data2, data3)' –

+0

@ad: Das sind Konstruktorparameter, aber sofern Sie die Werte gespeichert haben in Feldern ist es dann verloren. Die Existenz von Parametern hilft dir nicht alleine. Parameter repräsentieren nur Informationen * für die Dauer eines Anrufs *. Sie interessieren sich für den * Status des Objekts * und den Status in Feldern. –

+0

Ah, ich danke, dass du das geklärt hast. Ich habe sie immer als Parameter bezeichnet, aber die Technik beweist das Gegenteil :). Alle Parameter erhalten Werte während der Erstellung jeder Unterklasse. Etwas wie das. 'string data1 = dataSource [0];' 'stringData2 = dataSource [1]' und so weiter. Die Daten sind definitiv da, ich habe nur Probleme beim Zugriff darauf. –

0

Die meisten Basislösung zu überschreiben ToString ist () in CustomDataType und irgendeine Art von formatierten Ausgabe erzeugen, die für Sie nützlich ist:

public override string ToString() 
{ 
    return string.Format(
    "{0}, {1}, {2}", 
    this.data1, 
    this.data2, 
    this.data3); 
} 

in abgeleiteten Typen, können Sie auch eine zusätzliche Ausgabe zu liefern ToString() außer Kraft setzen, plus der Basisklasse aufrufen, diese Werte umfassen:

public override string ToString() 
{ 
    return string.Format(
    "{0}, {1}, {2}", 
    base.ToString(), 
    this.derivedData1, 
    this.derivedData2); 
} 

Nun sollte Ihr Ausgangsschleife so etwas wie dies funktioniert:

foreach (CustomDataType listNum in myList) 
{ 
    txtFile.WriteLine(listNum.ToString()); 
} 
Verwandte Themen