Подтвердить что ты не робот

.net Пользовательская настройка Как к регистру нечувствителен синтаксический анализ перечисления ConfigurationProperty

Один из ConfigurationProperty, который у меня есть в моем ConfigurationSection, является ENUM. Когда .net анализирует это значение строки перечисления из файла конфигурации, будет выведено исключение, если случай не соответствует точно.

Можно ли игнорировать случай при анализе этого значения?

4b9b3361

Ответ 1

Вы можете использовать ConfigurationConverterBase для создания настраиваемого конвертера конфигурации, см. http://msdn.microsoft.com/en-us/library/system.configuration.configurationconverterbase.aspx

это выполнит задание:

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

а затем в вашей собственности:

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

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

Ответ 2

Попробуйте использовать это:

Enum.Parse(enum_type, string_value, true);

Последний параметр, установленный в true, указывает на игнорирование строкового кода при разборе.

Ответ 3

MyEnum.TryParse() имеет параметр IgnoreCase, установите его true.

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

UPDATE: Определение раздела конфигурации, подобного этому, должно работать

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; }
      }
    }