Enumerálások
Az enumerálások, más néven enumerálások olyan integráltípusok, amelyekben a címkék az értékek egy részhalmazához vannak rendelve. A literálok helyett használható kód olvashatóbbá és karbantarthatóbbá teheti őket.
Syntax
type enum-name =
| value1 = integer-literal1
| value2 = integer-literal2
...
Megjegyzések
Az enumerálás úgy néz ki, mint egy diszkriminált egyesítés, amely egyszerű értékekkel rendelkezik, kivéve, hogy az értékek megadhatók. Az értékek általában 0-nál vagy 1-nél kezdődő egész számok, vagy bitpozíciókat képviselő egész számok. Ha az enumerálás bitpozíciók ábrázolására szolgál, használja a Flags attribútumot is.
Az enumerálás alapjául szolgáló típus a használt literálból van meghatározva, így például használhat konstansokat egy utótaggal, például 1u
2u
, stb. egy aláíratlan egész szám (uint32
) típushoz.
Ha az elnevezett értékekre hivatkozik, magát az enumerálási típus nevét kell használnia minősítőként, enum-name.value1
azaz nem csak value1
. Ez a viselkedés eltér a diszkriminált szakszervezetek viselkedésétől. Ennek az az oka, hogy az enumerálások mindig a RequireQualifiedAccess attribútummal rendelkeznek.
Az alábbi kód egy enumerálás deklarációját és használatát mutatja be.
// Declaration of an enumeration.
type Color =
| Red = 0
| Green = 1
| Blue = 2
// Use of an enumeration.
let col1: Color = Color.Red
Az enumerációkat egyszerűen konvertálhatja a mögöttes típusra a megfelelő operátor használatával, ahogyan az az alábbi kódban is látható.
// Conversion to an integral type.
let n = int col1
Az enumerált típusok a következő alapul szolgáló típusok egyikével rendelkezhetnek: sbyte
, byte
, int16
, uint16
, int32
, uint32
, int64
, uint64
és char
. Az enumerálási típusok a .NET-keretrendszer öröklődő System.Enum
típusokként jelennek meg , amelyek viszont öröklődnek.System.ValueType
Így ezek olyan értéktípusok, amelyek a veremen vagy a beágyazott objektumban találhatók, és az alapul szolgáló típus bármely értéke érvényes értéke az enumerálásnak. Ez az enumerálási értékek mintaegyeztetésekor jelentős, mivel olyan mintát kell megadnia, amely a névtelen értékeket fogja.
Az enum
F#-kódtár függvénye enumerálási érték létrehozására használható, még az előre definiált, elnevezett értékek egyikétől eltérő érték létrehozására is. A függvényt az enum
alábbiak szerint használhatja.
let col2 = enum<Color> (3)
Az alapértelmezett enum
függvény a típussal int32
működik. Ezért nem használható más mögöttes típusokkal rendelkező enumerálási típusok esetében. Ehelyett használja az alábbiakat.
type uColor =
| Red = 0u
| Green = 1u
| Blue = 2u
let col3 = Microsoft.FSharp.Core.LanguagePrimitives.EnumOfValue<uint32, uColor>(2u)
Emellett az enumerálási esetek mindig a következőképpen lesznek kibocsátva public
: . Így igazodnak a C# és a .NET-platform többi részéhez.