Exception catched :System.ArgumentException: Enum underlying type and the object must be same type or object must be a String. Type passed in was 'System.Int64'; the enum underlying type was 'System.Int32'. at System.RuntimeType.IsEnumDefined
해당 문제는 C#에서 enum 의 정의된 값이 있는지 판단하는 Enum.IsDefined를 사용하다가 발생한 에러로 해결방법을 간략하게 포스팅 한다.
반응형
< 문제가 되는 여러가지 경우 >
설명 | |
데이터 타입 불일치 | enum을 다룰 때 올바른 데이터 타입을 사용하는지 확인하세요. enum에 전달되는 모든 값이 int (System.Int32) 타입임을 확인합니다. |
Enum 파싱 또는 변환 문제 | 값들을 enum 타입으로 변환할 때, 변환 프로세스가 데이터 타입을 올바르게 처리하는지 확인합니다. Int64 값을 Int32 enum에 할당하려고 할 때 변환 오류가 발생할 수 있습니다. |
Enum 정의 확인 | enum의 정의가 실제로 System.Int32 (int) 타입을 기반으로 하는지 확인하세요. 필요한 경우 enum 정의를 수정하여 사용하는 데이터 타입과 일치하도록 조정합니다. |
타입 변환 처리 | Int64 값을 사용해야 하지만 enum이 Int32만 허용하는 경우, enum에 값을 할당하기 전에 타입 변환을 수행해야 합니다. |
< 예시 코드 >
using System;
public enum MyEnum : int
{
Value1,
Value2,
Value3
}
class Program
{
static void Main()
{
// 예시 Int64 값
long intValue = 2;
// enum과 함께 사용하기 전에 Int64를 Int32로 변환
if (Enum.IsDefined(typeof(MyEnum), (int)intValue))
{
MyEnum enumValue = (MyEnum)(int)intValue;
Console.WriteLine("Enum value: " + enumValue);
}
else
{
Console.WriteLine("값을 enum으로 변환할 수 없습니다.");
}
}
}
★☆☆☆☆
반응형
'개발 > 기본) 기본기' 카테고리의 다른 글
기본기) 패턴 매칭 (Pattern Matching ) (5) | 2024.03.18 |
---|---|
기본기) Guard Clause(Guard Statement) (0) | 2024.03.18 |
C#)CallerFilePath : 호출자 정보 확인 (0) | 2023.12.18 |
기본기)URL(Uniform Resource Location) Format (UriBuilder) (1) | 2023.11.24 |
c#) volatile 키워드 (2) | 2023.11.08 |
댓글