Как сохранить значение перечисления в файле настроек Windows Forms?
-
10-07-2019 - |
Вопрос
Я использую Windows Forms и VS2008. Я хочу сохранить значение enum в файле настроек моего приложения.
Редактор настроек в VS2008 предоставляет только ограниченный набор типов. Удивительно, но перечисления не являются одним из этих типов, которые поддерживаются автоматически - правильно ли я это понял?
Из прочтения этой темы мне кажется, что мне может понадобиться написать класс TypeConverter, чтобы мое перечисление могло быть преобразовано в строку и наоборот. Я реализовал это для моего перечисления и добавил свойство TypeConverter в мое перечисление, чтобы указать, какой класс преобразователя использовать для этого перечисления.
Однако, когда я пытаюсь указать это в моем файле настроек (в диалоговом окне «Выбор типа»), он просто говорит, что мой тип не определен, поэтому я застрял.
Может ли кто-нибудь объяснить мне, как я храню перечисление в файле настроек в приложении Windows Forms? Кажется, что это такой невероятно простой (и часто требуемый) элемент функциональности, что я удивлен, что он еще не поддерживается, и что мне, похоже, пришлось проделать так много работы, чтобы заставить его работать (и только для одного перечисления!). р>
Поэтому я думаю, что я что-то упустил, и это действительно очень просто ...
Допустим, мое перечисление выглядит так:
namespace MyApp
{
enum MyEnum
{
Yes,
No
}
}
... как мне сохранить значение из этого перечисления в моем файле настроек? (И, конечно, получить его).
(Очевидно, я могу просто сохранить строку или целое число и интерпретировать себя, но это кажется довольно неуклюжим, и я ожидаю, что Windows Forms будет обрабатывать такие вещи более чисто.)
Решение
Перечисления на самом деле не так уж далеки от числовых типов (по умолчанию int) и могут использоваться взаимозаменяемо. Я не думаю, что это неуклюже бросать туда-сюда и хранить int. На самом деле в файле настроек могут храниться только строки. Под расширением это означает все, что можно сериализовать в строку.
Другим способом было бы сохранить текстовое значение (чтобы оно могло редактироваться человеком) перечисления и проанализировать его с помощью Enum.Parse (type, string). Р>