아래와 같이 값 또는 값으로 TryParse
열거 형에 코드를 작성했습니다. Flags
특성을 사용하여 열거 형을 구문 분석하도록이 코드를 확장하려면 어떻게해야합니까?Flags 속성이있는 Enum.TryParse
public static bool TryParse<T>(this T enum_type, object value, out T result)
where T : struct
{
return enum_type.TryParse<T>(value, true, out result);
}
public static bool TryParse<T>(this T enum_type,
object value, bool ignoreCase, out T result)
where T : struct
{
result = default(T);
var is_converted = false;
var is_valid_value_for_conversion = new Func<T, object, bool, bool>[]{
(e, v, i) => e.GetType().IsEnum,
(e, v, i) => v != null,
(e, v, i) => Enum.GetNames(e.GetType()).Any(n => String.Compare(n, v.ToString(), i) == 0) || Enum.IsDefined(e.GetType(), v)
};
if(is_valid_value_for_conversion.All(rule => rule(enum_type, value, ignoreCase))){
result = (T)Enum.Parse(typeof(T), value.ToString(), ignoreCase);
is_converted = true;
}
return is_converted;
}
현재이 코드는 다음 열거 작동 :
가 작동하지 않습니다
enum SomeEnum{ A, B, C }
// can parse either by 'A' or 'a'
enum SomeEnum1 : int { A = 1, B = 2, C = 3 }
// can parse either by 'A' or 'a' or 1 or "1"
:
[Flags]
enum SomeEnum2 { A = 1, B = 2, C = 4 } // can parse either by 'A' or 'a'
// cannot parse for A|B
감사합니다!
첫 번째 규칙이 null 체크가 아니어야합니까? – ChaosPandion
첫 번째 검사 또는 두 번째는 뭔가가 누락되지 않는 한이 경우 IMO에서 차이를 만들지 않을 것입니다. 왜냐하면 제약 조건이 구조체에 있기 때문에 호출이 유효한 열거 형인지 확인한 후에 값이 맞는지 확인해야한다고 생각합니다. 없는 – Sunny