다음을 통해 공유


CA1028: 열거형 저장소는 Int32여야 합니다.

TypeName

EnumStorageShouldBeInt32

CheckId

CA1028

범주

Microsoft.Design

변경 수준

주요 변경

원인

public 열거형의 내부 형식이 System.Int32가 아닙니다.

규칙 설명

열거형은 서로 관련 있는 명명된 상수 집합을 정의하는 값 형식입니다. 기본적으로 System.Int32 데이터 형식은 상수 값을 저장하는 데 사용됩니다. 이 내부 형식을 변경할 수 있지만 대부분의 시나리오에서 변경할 필요가 없으며 변경하지 않는 것이 좋습니다. Int32보다 작은 데이터 형식을 사용해도 성능이 크게 향상되는 것은 아닙니다. 기본 데이터 형식을 사용할 수 없으면 CLS(Common Language System) 규격의 정수 계열 형식인 Byte, Int16, Int32 또는 Int64 중 하나를 사용하여 모든 열거형 값을 CLS 규격 프로그래밍 언어로 나타낼 수 있도록 해야 합니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 크기나 호환성 문제가 없는 경우 Int32를 사용합니다. Int32의 크기가 값을 저장하기에 충분하지 않으면 Int64를 사용합니다. 이전 버전과의 호환성 때문에 더 작은 데이터 형식이 필요할 경우에는 Byte 또는 Int16을 사용하십시오.

경고를 표시하지 않는 경우

이전 버전과의 호환성 문제를 해결하기 위해 필요한 경우에만 이 규칙에서 경고를 표시하지 않도록 설정하십시오. 응용 프로그램에서는 이 규칙을 따르지 않더라도 대개 문제가 발생하지 않습니다. 언어 상호 운용성이 필요한 라이브러리에서는 이 규칙을 따르지 않는 경우 사용자에게 부정적인 영향을 줄 수 있습니다.

규칙 위반 예

설명

다음 예제에서는 권장되는 내부 데이터 형식을 사용하지 않는 두 가지 열거형을 보여 줍니다.

코드

Imports System

Namespace Samples

    <Flags()> _
    Public Enum Days As UInteger
        None = 0
        Monday = 1
        Tuesday = 2
        Wednesday = 4
        Thursday = 8
        Friday = 16
        All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
    End Enum

    Public Enum Color As SByte
        None = 0
        Red = 1
        Orange = 3
        Yellow = 4
    End Enum

End Namespace
using System;

namespace DesignLibrary
{
   [Flags]
   public enum Days : uint
   {
      None        = 0,
      Monday      = 1,
      Tuesday     = 2,
      Wednesday   = 4,
      Thursday    = 8,
      Friday      = 16,
      All         = Monday| Tuesday | Wednesday | Thursday | Friday
   }

   public enum Color :sbyte
   {
      None        = 0,
      Red         = 1,
      Orange      = 3,
      Yellow      = 4
   }
}

수정 방법 예

설명

다음 예제에서는 내부 데이터 형식을 Int32로 변경하여 앞의 규칙 위반 문제를 해결합니다.

코드

Imports System

Namespace Samples

    <Flags()> _
    Public Enum Days As Integer
        None = 0
        Monday = 1
        Tuesday = 2
        Wednesday = 4
        Thursday = 8
        Friday = 16
        All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
    End Enum

    Public Enum Color As Integer
        None = 0
        Red = 1
        Orange = 3
        Yellow = 4
    End Enum

End Namespace
using System;

namespace Samples
{
    [Flags]
    public enum Days : int
    {
        None        = 0,
        Monday      = 1,
        Tuesday     = 2,
        Wednesday   = 4,
        Thursday    = 8,
        Friday      = 16,
        All         = Monday| Tuesday | Wednesday | Thursday | Friday
    }

    public enum Color : int
    {
        None        = 0,
        Red         = 1,
        Orange      = 3,
        Yellow      = 4
    }
}

관련 규칙

CA1008: 열거형에는 0 값이 있어야 합니다.

CA1027: 열거형을 FlagsAttribute로 표시하십시오.

CA2217: 열거형을 FlagsAttribute로 표시하지 마십시오.

CA1700: 열거형 값의 이름을 'Reserved'로 지정하지 마십시오.

CA1712: 열거형 값에 형식 이름을 접두사로 사용하지 마십시오.

참고 항목

참조

System.Byte

System.Int16

System.Int32

System.Int64