주어진 유형이 열거 형인지 확인


117

모든 열거 형을 [Description] 속성에 정의 된 문자열 값으로 변환 할 수 있도록 Json.NET 용 JsonConverter를 작성 중입니다.

예를 들면 :

public enum MyEnum {
    [Description("Sunday")] Sunday,
    [Description("Monday")] Monday,
    [Description("Tuesday")] Tuesday,
    [Description("Wednesday")] Wednesday,
    [Description("Thursday")] Thursday,
    [Description("Friday")] Friday,
    [Description("Saturday")] Saturday
}

myEnum.Description()분명히 문자열 설명을 반환 하는 지원 코드가 있습니다.

JsonConverter 구현에는 다음 메서드가 있습니다.

    public override bool CanConvert(Type objectType)
    {

    }

나는 여부를 결정하는 방법을 알아 내려고 노력하고 있어요 objectType입니다 Enum및 컨버터는이 객체를 변환 할 수 있습니다 알고있는 사실 그래서를 반환합니다. 나는 많은 것을 가지고 있기 때문에 Enum각각을 명시 적으로 확인할 수 없으므로 이것을 수행하는 더 일반적인 방법을 바랐습니다.


"determine if objectType is an Enum"이라고 말하면 기본적으로 objectType이 다른 enum이 아닌 "MyEnum"인지 확인하려고합니다. 그 맞습니까?
Pawan Mishra 2011

아니요 Enum인지 확인하고 싶습니다. @minitech의 대답은 내가 찾고있는 것입니다.
Bryan Migliorisi 2011

답변:


234

IsEnum속성 사용 :

if(objectType.IsEnum) {
    return true;
}

62
아니면 그냥return objectType.IsEnum
앤드류 휘태커

7
@AndrewWhitaker : 나는 메소드가 호출되기 때문에 것을 생각 CanConvert, 그것이이의 단지 경우, 여러 다른 가능한 변환 확인합니다 enum. 그렇지 않으면 IsEnum속성 자체를 사용하는 것이 좋습니다.
Ry-

5
@BryanMigliorisi : 천만에요 :) 항상 IntelliSense를 찾아보세요. 많은 것을 배웠습니다.
Ry-

9
. @SergeyMetlov는 PCL에서 당신은 objectType.GetTypeInfo () IsEnum 사용할 수 있습니다
알렉산더 뮐러

어떻게 시합 (즉, myObject가 열거입니다) 경우
닉 Kovalsky


1

나는 [Description]에 너무 집중하여 질문을 완전히 잘못 해석 했으므로 특정 열거 형에 [description] 속성이 있는지 여부를 확인하려는 경우 (json이없는 경우 적합 함을 던지는 경우) 다음과 같습니다. 이를 확인하는 한 가지 가능한 방법 :

public override bool CanConvert(Type objectType)
{
    FieldInfo[] fieldInfo = objectType.GetFields(BindingFlags.Public | BindingFlags.Static);

    if( fieldInfo.Length > 0 )
    {
        return ( fieldInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false).Length > 0 );
    }
    else
    {
        return false;
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.