Как сохранить значение перечисления в файле настроек Windows Forms?

StackOverflow https://stackoverflow.com/questions/312107

Вопрос

Я использую Windows Forms и VS2008. Я хочу сохранить значение enum в файле настроек моего приложения.

Редактор настроек в VS2008 предоставляет только ограниченный набор типов. Удивительно, но перечисления не являются одним из этих типов, которые поддерживаются автоматически - правильно ли я это понял?

Из прочтения этой темы мне кажется, что мне может понадобиться написать класс TypeConverter, чтобы мое перечисление могло быть преобразовано в строку и наоборот. Я реализовал это для моего перечисления и добавил свойство TypeConverter в мое перечисление, чтобы указать, какой класс преобразователя использовать для этого перечисления.

Однако, когда я пытаюсь указать это в моем файле настроек (в диалоговом окне «Выбор типа»), он просто говорит, что мой тип не определен, поэтому я застрял.

Может ли кто-нибудь объяснить мне, как я храню перечисление в файле настроек в приложении Windows Forms? Кажется, что это такой невероятно простой (и часто требуемый) элемент функциональности, что я удивлен, что он еще не поддерживается, и что мне, похоже, пришлось проделать так много работы, чтобы заставить его работать (и только для одного перечисления!).

Поэтому я думаю, что я что-то упустил, и это действительно очень просто ...

Допустим, мое перечисление выглядит так:

namespace MyApp
{
    enum MyEnum
    {
        Yes,
        No
    }
}

... как мне сохранить значение из этого перечисления в моем файле настроек? (И, конечно, получить его).

(Очевидно, я могу просто сохранить строку или целое число и интерпретировать себя, но это кажется довольно неуклюжим, и я ожидаю, что Windows Forms будет обрабатывать такие вещи более чисто.)

Это было полезно?

Решение

Перечисления на самом деле не так уж далеки от числовых типов (по умолчанию int) и могут использоваться взаимозаменяемо. Я не думаю, что это неуклюже бросать туда-сюда и хранить int. На самом деле в файле настроек могут храниться только строки. Под расширением это означает все, что можно сериализовать в строку.

Другим способом было бы сохранить текстовое значение (чтобы оно могло редактироваться человеком) перечисления и проанализировать его с помощью Enum.Parse (type, string).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top