C #: Можно ли сохранить значение Enum как настройку? - PullRequest
8 голосов
/ 26 августа 2011

Можно ли сохранить значение enum в качестве настройки, используя синтаксис Properties.Settings.Default["MySetting"] в C #?Я попытался создать настройку на страницах свойств моего проекта, но в списке доступных типов появились только системные классы.

Если это можно сделать, как мне это сделать?Заранее спасибо за помощь.

Ответы [ 3 ]

15 голосов
/ 26 августа 2011

просто сохраните его как int и конвертируйте при необходимости.

Properties.Settings.Default["MySetting"] = myEnumValue;

// and later 
var settingValue = Properties.Settings.Default["MySetting"];
MyEnum value = (MyEnum)settingValue;

Если вы чувствуете необходимость, вы можете использовать Enum.IsDefined(typeof(MyEnum), value), чтобы убедиться, что она действительна. Вы также можете сохранить строковое значение, чтобы оно было в удобочитаемом формате в вашем файле конфигурации:

Properties.Settings.Default["MySetting"] = myEnumValue.ToString();

// and later 
var settingValue = Properties.Settings.Default["MySetting"];
MyEnum value = (MyEnum)Enum.Parse( typeof(MyEnum), settingValue );
2 голосов
/ 13 апреля 2019

Это старый пост, но я думаю, что это решение стоит опубликовать, для которого может возникнуть та же проблема.
По сути, она состоит в создании новой библиотеки, на которую должен ссылаться основной проект, чтобы эта библиотека представляла перечисление как новый тип, который можно выбрать из Properties.Settings.settings . В моем случае я хочу перечислить уровни серьезности.

Новая библиотека
Под вашим текущим решением создайте новую пустую библиотеку классов с кодом ниже:

namespace CustomTypes
{
    [Serializable]
    public enum Severity
    {
        INFO,
        WARNING,
        EXCEPTION,
        CRITICAL,
        NONE
    }
}

Ссылка на библиотеку

  • Скомпилируйте и создайте ссылку на вновь созданную библиотеку во всех проектах, которые будут использовать этот тип.
  • Теперь откройте Свойства вашего проекта => Настройки.
    Новая библиотека может быть еще не видна в списке type DropDown. Если ты этого не видишь, выберите Обзор внизу DropDown и попробуйте найти библиотеку.
    Если он все еще не виден, введите полный путь к новому типу в поле Selected Type. (В этом примере введите «CustomTypes.Severity», как показано ниже:

    enter image description here

    С этого момента новый тип должен отображаться и использоваться в Properties.Settings.settings.

    enter image description here
0 голосов
/ 17 июня 2015

Вот как я могу установить тип настройки на MyEnum тип перечисления:

  1. Создайте новую настройку свойства типа string (тип string будет изменен на MyEnum введите в следующих шагах)

  2. Открыть настройки. Дизайн.cs

enter image description here

  1. Измените тип возврата вашего нового свойства с string на тип перечисления MyEnum:

    При условии, что тип параметра Enum имеет имя MyEnum (в Company.Enums namespace), измените тип возвращаемого значения на тип global::Company.Enums.MyEnum:

        [global::System.Configuration.ApplicationScopedSettingAttribute()]
        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
        [global::System.Configuration.DefaultSettingValueAttribute("MySetting")]
        public global::Company.Enums.MyEnum MyEnum{
            get {
                return ((global::Company.Enums.MyEnum)(this["MyEnum"]));
            }
        }
    

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

MyEnum value = Properties.Settings.Default["MySetting"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...