Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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ı sabitler yerine kullanabilirsiniz.
Sözdizimi
type enum-name =
| value1 = integer-literal1
| value2 = integer-literal2
...
Açıklamalar
Numaralandırma, basit değerlere sahip ayrıcalıklı bir birleşim gibi görünür, ancak değerler belirtilebilir. 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 listenin temel alınan türü, kullanılan değişmez değerden belirlenir; böylece, örneğin, imzasız bir tamsayı (1u) türü için 2u, uint32 gibi sonek içeren sabitleri kullanabilirsiniz.
Adlandırılmış değerlere başvurduğunuzda, yalnızca enum-name.value1 değil, numaralandırma türünün adını bir niteleyici olarak, yani value1, 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
Sıralı türler aşağıdaki temel türlerden birine sahip olabilir: sbyte, byte, int16, uint16, int32, uint32, int64, uint64, ve char. Numaralandırma türleri .NET Framework'te öğesinden System.Enumdevralınan türler olarak temsil edilir ve bu da öğesinden System.ValueTypedevralı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. Numaralandırma değerleri üzerinde desen eşleştirme yaparken 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.
enum işlevini şu şekilde kullanırsınız.
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, enumlar için durumlar her zaman public olarak yayımlanır. Bu, C# ve .NET platformunun geri kalanıyla uyumlu hale getirmeleri için yapılır.
Yalnızca tanımlı sabit listesi durumlarında kapsamlı eşleştirmeyi etkinleştirmek için, yönergesini #nowarn "104"kullanarak FS0104 uyarısını gizleyebilirsiniz. Bu, derleyicinin desen eşleştirmesi sırasında yalnızca bildirilen enum değerlerini geçerli olarak ele almasına olanak tanır ve tüm değerlerin kapsandığından emin olduğunuzda genel bir durum belirtme gereğini ortadan kaldırarak kullanışlı olur.
FS0104 (Enums may take values outside known cases.) uyarısı mevcuttur çünkü enum'lara, örneğin doğrudan veya bit tabanlı işlemlerin sonucu olarak rastgele ana değerler atanabilir.