programing

C # int에서 열거 형으로 변환

kingscode 2021. 1. 17. 10:59
반응형

C # int에서 열거 형으로 변환


중복 가능성 :
C #에서 int를 열거 형으로 캐스팅

다음 코드가있는 경우 :

enum foo : int
{
    option1 = 1,
    option2,
    ...
}

private foo convertIntToFoo(int value)
{
    // Convert int to respective Foo value or throw exception
}

전환 코드는 어떻게 생겼습니까?


int를 Foo로 캐스팅하는 것이 좋습니다.

int i = 1;
Foo f = (Foo)i;

정의되지 않은 값을 캐스팅하려고하면 여전히 작동합니다. 이로 인해 발생할 수있는 유일한 피해는 나중에 값을 사용하는 방법입니다.

값이 열거 형에 정의되어 있는지 확인하려면 Enum.IsDefined를 사용할 수 있습니다.

int i = 1;
if (Enum.IsDefined(typeof(Foo), i))
{
    Foo f = (Foo)i;
}
else
{
   // Throw exception, etc.
}

그러나 IsDefined를 사용하면 캐스팅보다 많은 비용이 듭니다. 당신이 사용하는 것은 당신의 구현에 달려 있습니다. 사용자 입력을 제한하거나 열거 형을 사용할 때 기본 케이스 처리를 고려할 수 있습니다.

또한 enum이 int에서 상속하도록 지정할 필요가 없습니다. 이것이 기본 동작입니다.


여기서 명시 적으로 캐스팅 할 수 있다고 확신합니다.

foo f = (foo)value;

열거 형이 int에서 상속 (?)한다고 말하면됩니다.

enum foo : int

EDIT 예 기본적으로 enums 기본 유형은 int입니다. 그러나 char을 제외한 모든 정수 유형을 사용할 수 있습니다.

열거 형에없는 값에서 캐스팅하여 잘못된 열거 형을 생성 할 수도 있습니다. 나는 이것이 참조의 유형을 변경하고 실제로 메모리의 값을 변경하지 않음으로써 작동한다고 생각합니다.

enum (C # 참조)
열거 유형 (C # 프로그래밍 가이드)


캐스팅이면 충분합니다. C # 3.0을 사용하는 경우 enum 값을 구문 분석하는 편리한 확장 메서드를 만들 수 있습니다.

public static TEnum ToEnum<TInput, TEnum>(this TInput value)
{
    Type type = typeof(TEnum);

    if (value == default(TInput))
    {
        throw new ArgumentException("Value is null or empty.", "value");
    }

    if (!type.IsEnum)
    {
        throw new ArgumentException("Enum expected.", "TEnum");
    }

    return (TEnum)Enum.Parse(type, value.ToString(), true);
}

if (Enum.IsDefined(typeof(foo), value))
{
   return (Foo)Enum.Parse(typeof(foo), value);
}

도움이 되었기를 바랍니다

편집 이 대답은 내 예제에서 값이 문자열로 투표되어 질문이 int를 요청했습니다. 내 사과; 다음은 좀 더 명확해야합니다. :-)

Type fooType = typeof(foo);

if (Enum.IsDefined(fooType , value.ToString()))
{
   return (Foo)Enum.Parse(fooType , value.ToString());
}

상속이 필요하지 않습니다. 넌 할 수있어:

(Foo)1 

작동합니다;)

ReferenceURL : https://stackoverflow.com/questions/502905/c-sharp-int-to-enum-conversion

반응형