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
'programing' 카테고리의 다른 글
Visual Studio 2013 및 ASP.NET 웹 구성 도구 (0) | 2021.01.17 |
---|---|
Flutter : HintText가 있지만 밑줄이없는 TextField를 만드는 방법은 무엇입니까? (0) | 2021.01.17 |
2D에서 다른 점으로 점 회전 (0) | 2021.01.17 |
Grails 컨트롤러에서 404 / 50x 상태 코드를 반환하려면 어떻게해야합니까? (0) | 2021.01.17 |
Rails 3 — Bundler / Capistrano 오류 (0) | 2021.01.17 |