2011-08-25 14 views
8

¿Se puede guardar un valor enum como configuración, usando la sintaxis Properties.Settings.Default["MySetting"] de C#? Traté de crear una configuración en las páginas de propiedades de mi proyecto, pero solo las clases del sistema aparecían en la lista de tipos disponibles.C#: ¿Se puede guardar un valor de Enum como configuración?

Si se puede hacer, ¿cómo lo hago? Gracias de antemano por tu ayuda.

Respuesta

13

simplemente almacénelo como un int y conviértalo cuando sea necesario.

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

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

Si usted siente la necesidad puede utilizar Enum.IsDefined(typeof(MyEnum), value) para asegurarse de que es válido. También puede almacenar un valor de cadena para que sea en un formato legible por humanos en el fichero de configuración:

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

// and later 
var settingValue = Properties.Settings.Default["MySetting"]; 
MyEnum value = (MyEnum)Enum.Parse(typeof(MyEnum), settingValue); 
+5

O almacene una 'cadena', y luego use 'Enum.TryParse'. Más humanamente legible de esa manera. –

+0

Hay una mejor respuesta [aquí] (http://stackoverflow.com/questions/2184209). En resumen, en la columna Tipo, seleccione "Buscar ..." y luego escriba el nombre completo de la enumeración en el cuadro de texto "Tipo seleccionado" en la parte inferior. –

0

Aquí es cómo establecer el tipo de Ajuste de tipo MyEnum enumeración:

  1. Crear la nueva configuración de propiedad de tipo string (tipo string se cambiará a MyEnum tipo en los próximos pasos)

  2. abiertas Settings.Designer.cs

: enter image description here

  1. modificar el tipo de devolución de su nueva propiedad de string a su tipo de enumeración MyEnum:

    Dada la configuración de tipo Enum se llama MyEnum (en Company.Enums espacio de nombres), editar el tipo de retorno sea de tipo 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"])); 
         } 
        } 
    

De esta manera se ve mucho más limpio, con una sola declaración; la seguridad de tipo está garantizada en el lado del cliente, sin la necesidad de hacer la cadena innecesaria para el análisis enum.

MyEnum value = Properties.Settings.Default["MySetting"]; 
+3

El problema con este enfoque es que VS bloqueará sus cambios si alguna vez realiza alguna modificación a los ajustes. Nunca debe alterar archivos * .Designer.cs. – Timbo

+3

Lo que puede hacer es crear otro archivo que amplíe la clase parcial definida en el diseñador, que contiene una propiedad de conversión. – Timbo

Cuestiones relacionadas