열거형( 열거형이라고도 함)은 값의 하위 집합에 레이블이 할당되는 정수 형식입니다. 리터럴 대신에 사용하여 코드를 더 읽기 쉽고 유지 보수가 용이하게 만들 수 있습니다.
문법
type enum-name =
| value1 = integer-literal1
| value2 = integer-literal2
...
비고
열거형은 값을 지정할 수 있다는 점을 제외하고 단순 값이 있는 구분된 공용 구조체와 비슷합니다. 값은 일반적으로 0 또는 1에서 시작하는 정수 또는 비트 위치를 나타내는 정수입니다. 열거형이 비트 위치를 나타내기 위한 경우 Flags 특성도 사용해야 합니다.
열거형의 기본 형식은 사용된 리터럴에 따라 결정됩니다. 예를 들어 1u
및 2u
과 같은 접미사가 있는 리터럴을 부호 없는 정수 형식(uint32
)으로 사용할 수 있습니다.
명명된 값을 참조하는 경우 열거형 형식 자체의 이름을 한정자로 사용해야 합니다. 즉, enum-name.value1
단지 value1
. 이 동작은 차별된 노조의 동작과 다릅니다. 열거형에는 항상 RequireQualifiedAccess 특성이 있기 때문입니다.
다음 코드에서는 열거형의 선언 및 사용을 보여 줌
// Declaration of an enumeration.
type Color =
| Red = 0
| Green = 1
| Blue = 2
// Use of an enumeration.
let col1: Color = Color.Red
다음 코드와 같이 적절한 연산자를 사용하여 열거형을 기본 형식으로 쉽게 변환할 수 있습니다.
// Conversion to an integral type.
let n = int col1
열거형 형식은 다음 기본 형식 sbyte
중 하나를 가질 수 있습니다. , ,byte
int16
, uint16
, int32
uint32
, int64
uint64
및 .char
열거형 형식은 .NET Framework에서 상속된 System.Enum
형식으로 표시되며, 이 형식은 다시 System.ValueType
에서 상속된 것입니다. 따라서 포함하는 개체의 스택 또는 인라인에 있는 값 형식이며 기본 형식의 모든 값은 열거형의 유효한 값입니다. 열거형 값에 대한 패턴 매칭 시, 명명되지 않은 값을 포착할 수 있는 패턴을 제공해야 하므로 이는 중요합니다.
F# 라이브러리의 함수를 enum
사용하여 미리 정의된 명명된 값 중 하나 이외의 값도 열거형 값을 생성할 수 있습니다. 함수는 enum
다음과 같이 사용합니다.
let col2 = enum<Color> (3)
기본 enum
함수는 형식 int32
에서 작동합니다. 따라서 다른 기본 형식이 있는 열거형 형식에는 사용할 수 없습니다. 대신 다음을 사용합니다.
type uColor =
| Red = 0u
| Green = 1u
| Blue = 2u
let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)
또한 열거형의 경우는 항상 public
으로 내보내집니다. 따라서 C# 및 나머지 .NET 플랫폼과 일치합니다.
정의된 열거형 사례에 대해서만 전체 일치 를 사용하도록 설정하려면 지시문을 #nowarn "104"
사용하여 경고 FS0104를 표시하지 않을 수 있습니다. 이렇게 하면 컴파일러가 패턴 매칭 중에 선언된 열거형 값만을 유효한 값으로 취급할 수 있어, catch-all 처리를 할 필요가 없게 됩니다. 이는 모든 값이 확실히 다루어질 때 유용합니다.
예를 들어 직접 또는 Enums may take values outside known cases.
의 결과로 열거형에 임의의 기본 값을 할당할 수 있으므로 경고 FS0104()가 존재합니다.
참고하십시오
.NET