Megosztás a következőn keresztül:


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 1u2u, 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.value1azaz 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.Enumtí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 int32mű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.

Lásd még