Ich erstelle eine einfache Windows Forms-Anwendung mit C # Express 2008. Ich bin ein erfahrener C ++ - Entwickler, aber ich bin ziemlich neu in C # und .NET.
Ich speichere derzeit einige meiner einfachen Anwendungseinstellungen mithilfe des Einstellungsdesigners und des folgenden Codes:
// Store setting
Properties.Settings.Default.TargetLocation = txtLocation.Text;
...
// Restore setting
txtLocation.Text = Properties.Settings.Default.TargetLocation;
Jetzt möchte ich entweder ein Array von ints ( int[]
) oder möglicherweise eine Liste von ints ( List< int >
) als Einstellung speichern . Ich kann jedoch nicht herausfinden, wie das geht. Ich habe die Dokumentation, den Stackoverflow und Google durchsucht und kann keine anständige Erklärung dafür finden.
Aufgrund der wenigen Beispiele, die ich gefunden habe, muss ich eine serialisierbare Klasse erstellen, die mein Array oder meine Liste umschließt, und dann kann ich diesen Typ im Einstellungsdesigner verwenden. Ich bin mir jedoch nicht sicher, wie ich das genau machen soll.
int[]
(außer hübsch gedruckt) folgendermaßen<setting name="SomeTestSetting" serializeAs="String"><value><ArrayOfInt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><int>1</int><int>2</int><int>3</int></ArrayOfInt></value></setting>
lagern:
string value = String.Join(",", intArray.Select(i => i.ToString()).ToArray());
neu erstellen:
int[] arr = value.Split(',').Select(s => Int32.Parse(s)).ToArray();
Edit: Abel Vorschlag!
quelle
System.Linq
Ihre Verwendungen / Importe ergänzt haben, damit der oben genannte Trick funktioniert.Es gibt einen anderen Weg, um dieses Ergebnis zu erzielen, der viel sauberer in der Verwendung ist, aber mehr Code erfordert. Bei der Implementierung eines benutzerdefinierten Typs und Typkonverters ist der folgende Code möglich:
Um dies zu erreichen, benötigen Sie einen Typ mit einem Typkonverter, der die Konvertierung in und von Zeichenfolgen ermöglicht. Sie tun dies, indem Sie den Typ mit dem TypeConverterAttribute dekorieren:
Implementieren Sie dann diesen Typkonverter als Ableitung von TypeConverter:
Durch die Bereitstellung einiger praktischer Methoden für die MyNumberArray-Klasse, die wir dann sicher der und von List zuweisen können, würde die gesamte Klasse ungefähr so aussehen:
Um dies in den Einstellungen zu verwenden, fügen Sie die obigen Klassen zu einer Assembly hinzu und kompilieren sie. In Ihrem Settings.settings-Editor klicken Sie einfach auf die Option "Durchsuchen" und wählen die MyNumberArray-Klasse aus.
Auch dies ist viel mehr Code; Es kann jedoch auf viel kompliziertere Datentypen angewendet werden als ein einfaches Array.
quelle
Geben Sie die Einstellung als System.Collections.ArrayList an und dann:
quelle
Eine einfache Lösung besteht darin, den Standardwert einer Einstellung in der Eigenschaft auf null zu setzen. Überprüfen Sie jedoch im Konstruktor, ob die Eigenschaft null ist, und setzen Sie sie in diesem Fall auf den tatsächlichen Standardwert. Wenn Sie also eine Reihe von Ints möchten:
Es fühlt sich irgendwie hackig an, ist aber sauber und funktioniert wie gewünscht, da die Eigenschaften auf ihre letzten (oder Standardeinstellungen) initialisiert werden, bevor der Konstruktor aufgerufen wird.
quelle
Gebraucht
System.Object
.Beispiel:
Extrakt:
quelle
Ich denke, Sie haben Recht mit der Serialisierung Ihrer Einstellungen. Ein Beispiel finden Sie in meiner Antwort auf diese Frage:
Techniken zum Teilen einer Konfiguration zwischen zwei Apps?
Sie hätten eine Eigenschaft, die ein Array ist, wie folgt:
quelle
Erstellen Sie einige Funktionen, die ein int-Array in eine Zeichenfolge konvertieren, zwischen denen jedoch ein Zeichen wie "" (Leerzeichen) steht.
Wenn das Array also {1,34,546,56} ist, wäre die Zeichenfolge "1 34 645 56".
quelle