Listelemeler

Enum olarak da bilinen numaralar , etiketlerin değerlerin bir alt kümesine atandığı tamsayı türleridir. Bunları sabitler yerine kullanarak kodu daha okunabilir ve korunabilir hale ebilirsiniz.

Syntax

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

Açıklamalar

Bir numaralama, değerlerin belirtilebilir olması dışında basit değerlere sahip ayrımlı bir birliktelik gibi görünüyor. Değerler genellikle 0 veya 1 ile baş eden tamsayılar veya bit konumlarını temsil eden tamsayılardır. Bir numaralama bit konumlarını temsil edecek şekilde tasarlanmışsa Flags özniteliğini de kullansanız gerekir.

Numaralamanın temel alınan türü, kullanılan değişmez değerden belirlenir; böylece, örneğin, imzasız tamsayı ( ) türü için , ve gibi bir sonek ile değişmez değer 1u 2u uint32 kullanabilirsiniz.

Adlandırılmış değerlere başvurduğunda, yalnızca değil, bir niteleyici olarak enumeration türünün adını enum-name.value1 kullan value1 gerekir. Bu davranış, ayrımlı birliğin davranışından farklıdır. Bunun nedeni, numaralar her zaman RequireQualifiedAccess özniteliğine sahip olur.

Aşağıdaki kod, bir numaralama bildirimini ve kullanımını gösterir.

// Declaration of an enumeration.
type Color =
   | Red = 0
   | Green = 1
   | Blue = 2
// Use of an enumeration.
let col1 : Color = Color.Red

Aşağıdaki kodda gösterildiği gibi, uygun işleci kullanarak, numaralarını kolayca temel türe dönüştürebilirsiniz.

// Conversion to an integral type.
let n = int col1

Numaralandı türler şu temel türlerden birini kullanabilir: sbyte , , , , , , , byte ve int16 uint16 int32 uint32 int64 uint64 char . Enumeration türleri, .NET Framework devralınan türler olarak temsil edilen ve bu türler de System.Enum 'den devralınan System.ValueType türlerdir. Bu nedenle, bunlar, içeren nesnede yığında veya satır içinde bulunan değer türleridir ve temel alınan türün herhangi bir değeri sabit sabit değerinin geçerli bir değeridir. Bu durum, numaralama değerlerde desen eşleştirmesi olduğunda önemlidir çünkü adsız değerleri yakalayacak bir desen sağlamış oluruz.

F# kitaplığında işlevi, önceden tanımlanmış, adlandırılmış değerlerden biri dışında bir değer bile olmak üzere bir enum numaralama değeri oluşturmak için kullanılabilir. işlevini aşağıdaki enum gibi kullanabilirsiniz.

let col2 = enum<Color>(3)

Varsayılan işlev enum türüyle int32 çalışır. Bu nedenle, diğer temel türleri olan numaralama türleri ile kullanılamaz. Bunun yerine, aşağıdakini kullanın.

type uColor =
   | Red = 0u
   | Green = 1u
   | Blue = 2u
let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)

Ayrıca, enum örnekleri her zaman olarak public yayımlar. Bu, C# ve .NET platformunun geri kalanıyla uyumlu olacak şekildedir.

Ayrıca bkz.