본문 바로가기
개발/기본) 기본기

문제해결)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.IsEnumDefi..

by 테샤르 2024. 3. 8.

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으로 변환할 수 없습니다.");
        }
    }
}

 

 

 

★☆☆☆☆

 

반응형

댓글