2 Stimmen

Gibt es einen besseren Weg, um eine Liste von Zeichenfolgen in einer Anwendungskonfigurationsdatei als mit einer StringCollection zu speichern?

Ich habe eine Liste von Dateinamen, die ich in der Konfigurationsdatei meiner Anwendung speichern muss.

Die einzige Sammlung, die im ersten Kombinationsfeld auf der Einstellungsseite angezeigt wird, ist System.Collections.Specialized.StringCollection . Ursprünglich hatte ich dies nicht in Frage gestellt, da ich es in eine List<string> sofort. Es gab einen Teil des Codes, mit dem ich nicht zufrieden war, nämlich das Kopieren dieser Liste in und aus der Datei ListBox im Konfigurationsdialog:

public List<string> ImageNames
{
    get
    {
        return folderImages.Items.ToList();
    }
    set
    {
        folderImages.Items.AddRange(value.ToArray());
    }
}

Ich habe jedoch meinen Code überarbeitet und dachte, dass, wenn ich die Liste als eine StringCollection Ich könnte diesen Code verbessern. Überall sonst, wo ich die Liste/Sammlung verwendet habe, war es OK, aber diese Konvertierung ist immer noch nicht nach meinem Geschmack:

public StringCollection ImageNames
{
    get
    {
        var names = new StringCollection();
        names.AddRange(folderImages.Items.ToList().ToArray());
        return names;
    }
    set
    {
        value.ToList().ForEach(imageName => folderImages.Items.Add(imageName));
    }
}

Jetzt, wo ich den Code Seite an Seite sehe, denke ich, dass die List<string> Version "sauberer" ist - sie ist auf jeden Fall klarer.

Gibt es also eine andere Art von Sammlung oder Liste, die ich in der Einstellungsdatei speichern kann? Ich würde wirklich gerne die Konvertierung beim Lesen und Schreiben der Einstellungsdatei vermeiden, wenn möglich.

Andernfalls - gibt es einen saubereren Weg der Konvertierung zwischen einer StringCollection und ein ListBox.ObjectCollection (die ListBox.Items )?

1voto

caesay Punkte 16384

Sie können ein System.Object in den Einstellungen der App speichern, es ist nicht im anfänglichen Kombinationsfeld, aber es ist da, dann können Sie Ihre Daten direkt in und aus dem Objekt speichern.

0voto

ChrisF Punkte 130622

Am Ende kehrte ich zu meinem ursprünglichen Code zurück, aber mit viel saubereren Konvertierungen zwischen den StringCollection y List<string> - deren Hässlichkeit mein Ausgangspunkt war.

Beim Starten habe ich jetzt also:

possibleImageNames = Properties.Settings.Default.Images.ToList();

und beim Herunterfahren (wo ich die Konfigurationsdatei aktualisiere) habe ich:

Properties.Settings.Default.Images.Clear();
Properties.Settings.Default.Images.AddRange(possibleImageNames.ToArray());

Wo die ToList Methode auf der StringCollection ist eine Erweiterungsmethode, die dazu dient, den Schleifencode zu kapseln.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X