다음을 통해 공유


CA1028: 열거형 스토리지는 Int32여야 합니다.

속성
규칙 ID CA1028
제목 열거형 스토리지는 Int32여야 합니다.
범주 디자인
수정 사항이 주요 변경인지 여부 주요 변경
.NET 9에서 기본적으로 사용 아니요

원인

열거형의 기본 형식은 System.Int32가 아닙니다.

기본적으로 이 규칙은 외부에 표시되는 열거형만 확인하지만 이는 구성 가능합니다.

규칙 설명

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

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 크기 또는 호환성 문제가 있는 경우 외에는 Int32를 사용합니다. Int32가 값을 저장할 수 있을 정도로 크지 않은 경우에는 Int64를 사용합니다. 이전 버전과의 호환성을 위해 더 작은 데이터 형식이 필요한 경우 Byte 또는 Int16을 사용합니다.

경고를 표시하지 않는 경우

이전 버전과의 호환성 문제로 필요한 경우에만 이 규칙의 경고를 표시하지 않습니다. 애플리케이션에서 이 규칙을 준수하지 않으면 일반적으로 문제가 발생하지 않습니다. 언어 상호 운용성이 필요한 라이브러리에서 이 규칙을 준수하지 않으면 사용자에게 부정적인 영향을 줄 수 있습니다.

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

#pragma warning disable CA1028
// The code that's violating the rule is on this line.
#pragma warning restore CA1028

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none으로 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA1028.severity = none

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

분석할 코드 구성

다음 옵션을 사용하여 이 규칙이 실행될 코드베이스 부분을 구성합니다.

이 규칙, 적용되는 모든 규칙 또는 적용되는 이 범주(디자인)의 모든 규칙에 대해 이 옵션을 구성할 수 있습니다. 자세한 내용은 코드 품질 규칙 구성 옵션을 참조하세요.

특정 API 화면 포함

접근성을 기반으로 이 규칙을 실행할 코드베이스의 파트를 구성할 수 있습니다. 예를 들어 규칙이 퍼블릭이 아닌 API 표면에서만 실행되도록 지정하려면 프로젝트의 .editorconfig 파일에 다음 키-값 쌍을 추가합니다.

dotnet_code_quality.CAXXXX.api_surface = private, internal

예시

다음 예에서는 권장되는 기본 데이터 형식을 사용하지 않는 두 개의 열거형을 보여 줍니다.

[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
}
<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

다음 예에서는 기본 데이터 형식을 Int32로 변경하여 이전 위반을 수정합니다.

[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
}
<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

참고 항목