Есть ли лучший способ сохранить список строк в конфигурационном файле приложения, чем использование StringCollection? - PullRequest
2 голосов
/ 08 февраля 2010

У меня есть список имен файлов, которые нужно сохранить в файле конфигурации моих приложений.

Единственная коллекция, которая появляется в начальном поле со списком на странице настроек, это System.Collections.Specialized.StringCollection. Первоначально я не запрашивал это, поскольку преобразовал это в List<string> сразу. Был один фрагмент кода, который меня не порадовал: копирование этого списка в ListBox в диалоге конфигурации и обратно:

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

Однако я пересматривал свой код и думал, что, если я сохраню список как StringCollection, я смогу улучшить этот код. Везде, где я использовал список / коллекцию, все было в порядке, но это преобразование мне не нравится:

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));
    }
}

На самом деле, теперь я вижу код бок о бок (как бы), я думаю, что версия List<string> «чище» - она, безусловно, яснее.

Так есть ли другая коллекция или тип списка, который я могу сохранить в файле настроек? Я бы очень хотел избежать преобразования при чтении и записи файла настроек, если это вообще возможно.

В противном случае - есть ли более чистый способ преобразования между StringCollection и ListBox.ObjectCollection (ListBox.Items)?

Ответы [ 2 ]

1 голос
/ 08 февраля 2010

Вы можете сохранить System.Object в настройках приложения, его нет в начальном поле со списком, но он есть, тогда вы можете просто сохранить свои данные непосредственно на объект и с него.

0 голосов
/ 25 февраля 2010

В конце концов я фактически вернулся к своему исходному коду, но с гораздо более чистыми преобразованиями между StringCollection и List<string> - уродство которого было моей отправной точкой.

Так что теперь при запуске у меня есть:

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

и при выключении (где я обновляю файл конфигурации) у меня есть:

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

Где метод ToList в StringCollection является методом расширения - используется для инкапсуляции цикла кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...