programing

.net 사용자 지정 구성 enum ConfigurationProperty를 구문 분석하는 대 / 소문자를 구분하지 않는 방법

coolbiz 2021. 1. 16. 10:15
반응형

.net 사용자 지정 구성 enum ConfigurationProperty를 구문 분석하는 대 / 소문자를 구분하지 않는 방법


내 ConfigurationSection에있는 ConfigurationProperty 중 하나는 ENUM입니다. .net이 구성 파일에서이 열거 형 문자열 값을 구문 분석 할 때 대소 문자가 정확히 일치하지 않으면 예외가 발생합니다.

이 값을 구문 분석 할 때 대소 문자를 무시할 수 있습니까?


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

이것을 사용해보십시오 :

Enum.Parse(enum_type, string_value, true);

true로 설정된 마지막 매개 변수는 구문 분석 할 때 문자열 대소 문자를 무시하도록 지시합니다.


MyEnum.TryParse() IgnoreCase 매개 변수가있는 경우 true로 설정하십시오.

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

업데이트 : 이와 같은 구성 섹션을 정의하면 작동합니다.

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

참조 URL : https://stackoverflow.com/questions/8922930/net-custom-configuration-how-to-case-insensitive-parse-an-enum-configurationpro

반응형