71 votes

.net Custom Configuration Comment analyser insensible à la casse une énumération ConfigurationProperty

L'une des propriétés de configuration que j'ai dans ma section de configuration est un ENUM. Lorsque .net analyse cette valeur de chaîne d'énumération à partir du fichier de configuration, une exception sera levée si la casse ne correspond pas exactement.

Est-il possible d'ignorer la casse lors de l'analyse de cette valeur ?

251voto

Marco Points 29879

Essayez d'utiliser ceci :

 Enum.Parse(enum_type, string_value, true);

Le dernier paramètre défini sur true indique d'ignorer la casse de la chaîne lors de l'analyse.

44voto

ziv Points 1203

Vous pouvez utiliser ConfigurationConverterBase pour créer un convertisseur de configuration personnalisé, voir http://msdn.microsoft.com/en-us/library/system.configuration.configurationconverterbase.aspx

cela fera l'affaire :

  public class CaseInsensitiveEnumConfigConverter<T> : ConfigurationConverterBase
    {
        public override object ConvertFrom(
        ITypeDescriptorContext ctx, CultureInfo ci, object data)
        {
            return Enum.Parse(typeof(T), (string)data, true);
        }
    }

puis sur votre propriété :

 [ConfigurationProperty("unit", DefaultValue = MeasurementUnits.Pixel)]
[TypeConverter(typeof(CaseInsensitiveEnumConfigConverter<MeasurementUnits>))]
public MeasurementUnits Unit { get { return (MeasurementUnits)this["unit"]; } }

public enum MeasurementUnits
{
        Pixel,
        Inches,
        Points,
        MM,
}

21voto

tbt Points 662

MyEnum.TryParse() a un paramètre IgnoreCase, définissez-le sur true.

http://msdn.microsoft.com/en-us/library/dd991317.aspx

METTRE À JOUR: Définir la section de configuration comme ceci devrait fonctionner

 public class CustomConfigurationSection : ConfigurationSection
    {
      [ConfigurationProperty("myEnumProperty", DefaultValue = MyEnum.Item1, IsRequired = true)]
      public MyEnum SomeProperty
      {
        get
        {
          MyEnum tmp;
          return Enum.TryParse((string)this["myEnumProperty"],true,out tmp)?tmp:MyEnum.Item1;
        }
        set
        { this["myEnumProperty"] = value; }
      }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X