共用方式為


列舉 (F#)

列舉型別,也就是 列舉,,都是整數類資料型別標籤指派值的某子集合的位置。 列舉可用來取代常值,讓程式碼更容易閱讀及維護。

type enum-name =
   | value1 = integer-literal1
   | value2 = integer-literal2
   ...

備註

列舉與具有簡單值的已區分聯集十分類似,不同之處在於可以指定值。 值通常是以 0 或 1 開始的整數,或是表示位元位置的整數。 如果列舉用來代表位元位置中,您也應該使用FlagsAttribute屬性。

列舉的基礎型別是從使用的常值判斷,因此,您可以使用有後置字元的常值 (例如 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、uint16、uint64 和 char。 列舉型別在 .NET Framework 中表示為繼承自 Enum 的型別,而後者繼承自 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)

請參閱

概念

轉型和轉換 (F#)

其他資源

F# 語言參考