Listelemeler
Numaralandırmalar olarak da bilinen numaralandırmalar, etiketlerin değerlerin bir alt kümesine atandığı tam sayı türleridir. Kodu daha okunabilir ve sürdürülebilir hale getirmek için bunları değişmez değerler yerine kullanabilirsiniz.
Sözdizimi
type enum-name =
| value1 = integer-literal1
| value2 = integer-literal2
...
Açıklamalar
Numaralandırma, değerlerin belirtilmesi dışında basit değerleri olan ayrımcı bir birleşime çok benzer. Değerler genellikle 0 veya 1 ile başlayan tamsayılar ya da bit konumlarını temsil eden tamsayılardır. Sabit listesi bit konumlarını temsil etmesi amaçlanıyorsa Flags özniteliğini de kullanmanız gerekir.
Sabit listesi temel alınan türü, kullanılan değişmez değerden belirlenir; böylece, örneğin, imzasız bir tamsayı (uint32
) türü için , 2u
ve gibi 1u
bir sonek içeren değişmez değerleri kullanabilirsiniz.
Adlandırılmış değerlere başvurduğunuz zaman, numaralandırma türünün adını yalnızca değil, bir niteleyici enum-name.value1
value1
olarak kullanmanız gerekir. Bu davranış, ayrımcı birleşimlerden farklıdır. Bunun nedeni numaralandırmaların her zaman RequireQualifiedAccess özniteliğine sahip olmasıdır.
Aşağıdaki kod, bir numaralandırma 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 numaralandırmaları temel alınan türe kolayca dönüştürebilirsiniz.
// Conversion to an integral type.
let n = int col1
Numaralandırılmış türler aşağıdaki temel türlerden birine sahip olabilir: , , , , , int32
, uint32
, int64
, uint64
ve char
. uint16
int16
byte
sbyte
Numaralandırma türleri .NET Framework'te öğesinden System.Enum
devralınan türler olarak temsil edilir ve bu da öğesinden System.ValueType
devralınır. Bu nedenle, bunlar içeren nesnenin yığınında veya satır içinde bulunan değer türleridir ve temel alınan türün herhangi bir değeri numaralandırmanın geçerli bir değeridir. Sabit listesi değerlerinde desen eşleştirme sırasında bu önemlidir, çünkü adsız değerleri yakalayan bir desen sağlamanız gerekir.
enum
F# kitaplığındaki işlev, önceden tanımlanmış adlandırılmış değerlerden biri dışında bir değer bile olmak üzere bir numaralandırma değeri oluşturmak için kullanılabilir. işlevini aşağıdaki gibi kullanırsınız enum
.
let col2 = enum<Color> (3)
Varsayılan enum
işlev türüyle int32
çalışır. Bu nedenle, diğer temel türleri olan numaralandırma türleri ile kullanılamaz. Bunun yerine aşağıdakileri kullanın.
type uColor =
| Red = 0u
| Green = 1u
| Blue = 2u
let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)
Ayrıca, sabit listeleri için durumlar her zaman olarak public
yayılır. Bu, C# ve .NET platformunun geri kalanıyla uyumlu hale getirmeleri için yapılır.