Benutzer mit den meisten Antworten
Indexer für XML Serialisierung ersetzen

Frage
-
Moin!
Ich habe derzeit ein Programm in dem ich über einen Indexer vom Typ string einige Werte speichere (welche der Nutzer eingibt).
Nun möchte ich in dieses Programm eine XML Serialisierung einbauen. Diese ist aber leider nicht mit dem Indexer kompatibel.
Wie kann ich meinen Indexer jetzt am geschicktesten ersetzen?
Am besten so, dass ich auch noch weitere Werte (integer) darüber speichern kann.
Ich passe mein übriges Programm dann daran an. :)
Danke im voraus und beste Grüße.
Antworten
-
Hallo Timo,
wenn ich dich richtig verstehe hast du Momentan eine Klasse die du über einen Indexer mit Daten befüllen kannst. Innerhalb der Klasse hast du bestimmt ein Feld das die Daten aufnimmt. Dieses würde ich an deiner Stelle zu einer öffentlichen Eigenschaft umbauen die dann serialisiert werden kann. Das heißt demnach ds du weiterhin deinen Indexer nutzen kannst, die Daten aber auch über die Eigenschaft abrufbar wären.
Wie du das mit mehreren Indexern meinst ist mir nicht ganz klar. An sich ist es möglich 2 Indexer zu erstellen, solange sie unterschiedliche Typen als Key verwenden. auch mehrere Typen innerhalb eines Indexers sind möglich.
public MyType1 this[int key]{...} public MyType2 this[string key]{...}
public MyType3 this[int keyPart1, int keyPart2]{...}Diese kannst du auch wieder alle Serialisieren sofern du eine entsprechende Eigenschaft dahinter hängst und die Indexer lediglich als Kurzform für den Datenzugriff betrachtest.
Wenn du dagegen unterschiedliche Typen zurück geben möchtest (abhängig vom übergebenen Key), dann kannst du jedoch maximal die größte gemeinsame Basisklasse nutzen. Bei deinem beispielcode wäre das dann Basis, spätestens jedoch Object. Sonderlich schön ist es nicht da man immer erst casten muss, zugleich geht es aber kaum besser wenn man nicht schon vorher weiß was am Ende für ein Typ heraus kommt. Vielleicht wäre das Stichwort generics etwas womit man eine Umsetzung noch verbessern kann.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 11. August 2015 07:19
- Als Antwort markiert Aleksander Chalabashiev Donnerstag, 27. August 2015 10:03
Alle Antworten
-
Hi,
poste bitte die genaue und vollständige Fehlermeldung, die Du erhältst sowie die Deklarationen der Klassen inkl. deren Eigenschaften, die Du verwendest.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Ich erhalte keine Fehlermeldung, da ich die XML Serialisierung noch nicht durchgeführt habe.
Ich habe mich derzeit nur darüber belesen und weis daher, dass mein Indexer nicht unterstützt wird und ich ihn deshalb eh austauschen muss.
Gerade wenn ich noch weitere Werte speichern möchte, muss ich ihn austauschen. Denn mehrere Indexer mit dem Namen "this" können in einer Klasse ja logischerweise nicht vorhanden sein.
Das wären meine Klassen:
class Program { //Hier ist die Main Routine //Hier werden alle anderen Klassen aufgerufen
//Hier wird auch meine Eigenschaft genutzt und als Wert an die Funktion zum erstellen
//eines neuen Eintrags in den Indexer übergeben } class Basis { //enthält einige Basisfunktionen sowie meinen Indexer } class Menue1 : Basis { //Das Hauptmenü meiner Konsolenanwendung inklusive Tastatureingabe } class Menue2 : Basis { //Die Untermenüs meiner Konsolenanwendung inklusive Tastatureingabe } class Formen : Basis { //enthält Funktionen zum erstellen, ausgeben und löschen von Informationen aus dem Indexer }
class Eigenschaften
{
private int zaehlerF;
public int zaehlerFormen{ //... }
}
-
Hallo Timo,
wenn ich dich richtig verstehe hast du Momentan eine Klasse die du über einen Indexer mit Daten befüllen kannst. Innerhalb der Klasse hast du bestimmt ein Feld das die Daten aufnimmt. Dieses würde ich an deiner Stelle zu einer öffentlichen Eigenschaft umbauen die dann serialisiert werden kann. Das heißt demnach ds du weiterhin deinen Indexer nutzen kannst, die Daten aber auch über die Eigenschaft abrufbar wären.
Wie du das mit mehreren Indexern meinst ist mir nicht ganz klar. An sich ist es möglich 2 Indexer zu erstellen, solange sie unterschiedliche Typen als Key verwenden. auch mehrere Typen innerhalb eines Indexers sind möglich.
public MyType1 this[int key]{...} public MyType2 this[string key]{...}
public MyType3 this[int keyPart1, int keyPart2]{...}Diese kannst du auch wieder alle Serialisieren sofern du eine entsprechende Eigenschaft dahinter hängst und die Indexer lediglich als Kurzform für den Datenzugriff betrachtest.
Wenn du dagegen unterschiedliche Typen zurück geben möchtest (abhängig vom übergebenen Key), dann kannst du jedoch maximal die größte gemeinsame Basisklasse nutzen. Bei deinem beispielcode wäre das dann Basis, spätestens jedoch Object. Sonderlich schön ist es nicht da man immer erst casten muss, zugleich geht es aber kaum besser wenn man nicht schon vorher weiß was am Ende für ein Typ heraus kommt. Vielleicht wäre das Stichwort generics etwas womit man eine Umsetzung noch verbessern kann.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 11. August 2015 07:19
- Als Antwort markiert Aleksander Chalabashiev Donnerstag, 27. August 2015 10:03