webForumDet fria alternativet

När enumerations?

7 svar · 436 visningar · startad av CokeLight

CokeLightMedlem sedan juni 2000504 inlägg
#1

Hejsan, när (och varför kanske) ska man använda enumeration (enum) egentligen? Och när är det bättre med nåt annat? (Vilka är alternativen?) Har gjort ett (bok) exempel o det verkar vara lite som array eller? Har kollat på nätet o det finns mänger med kod exempel men hittar inte nåt som förklarar när det är bra o använda?

(det här behöver ju inte va i .NET forumet iofs men boken jag läste för närvarande handlade om C# så.. : )

Nån som kan sammanfatta lite kort? :)

fredrikMedlem sedan dec. 19991 072 inlägg
#2

Jag använder själv "Enum" för att få en bättre struktur och läsbarhet i min kod. Om vi tänker oss att vi har en metod som kan spara sin data på olika sätt:
- Till Databas
- Till Textfil
- Till Minnet

Då skulle vi kunna ha en inparameter som "Integer" och underförstått spara till Databas om det är 0, Textfil om det är 1 och Minnet om den är 2.

Rent strukturmässigt är inte detta så där jättebra, då det lätt kan bli fel. Istället kan vi nu skapa en Enum: (Koden är i VB.NET)

    Public Enum SaveType
        ToDB = 0
        ToTextFile = 1
        ToMemory = 2
    End Enum

Vår metod för att spara data kan då se ut:

    Private Sub SaveData(ByVal Type As SaveType)
        Select Case Type
            Case SaveType.ToDB
                'Kod för att spara till DB
            Case SaveType.ToTextFile
                'Kod för att spara till Textfil
            Case SaveType.ToMemory
                'Kod för att spara till Minnet
        End Select
    End Sub

När du sen anropar metoden så skriver du helt enkelt:

Call SaveData(SaveType.ToMemory)

Om du sen använder Visual Studio får du även upp en lista på alla tänkbara "Enums" när du ska skriva inparametrarna, så du slipper hålla reda på namnet på dem själv.

Så, en Array är det inte, utan mer en konstantlista.

JonMedlem sedan juli 20011 304 inlägg
#3

En liten länk

CokeLightMedlem sedan juni 2000504 inlägg
#4

Fredrik: Tack, precis det svar jag var ute efter ! Så, man kan sitta o koda utan enum o slut-effekten blir densamma, men för dig som programmerare får man helt enkelt bättre struktur på koden såsom du visade..? okay, super.. då vet jag.. kändes tidigare meningslöst o lära sig enums utan att veta dess egentliga syfte :)

Jon: Tack för länken också.. har gått igenom den o ska prova exemplena där :)

GladhMedlem sedan maj 20012 812 inlägg
#5

Det finns en viktigare aspekt än just att man får bättre struktur och det är att man tvingar användaren av ens kod att skicka i ett förutbestämt värde.

En Enum skickar ju bara runt en Int. Och i fredriks exempel så kan Int:en anta värde 1,2,3 men om du har en funktion som tar emot en Int så kan man ju skicka in andra värden än 1,2,3.

Med användadet av Enums tvingar du alltså den person som använder dina komponenter att skicka in rätt värde och du slipper på detta vis en potetial felkälla.

- Magnus

CokeLightMedlem sedan juni 2000504 inlägg
#6

Gladh: aha, intressant aspekt... hmm.. så menar du, om vi tar Fredriks exempel, att om det hade stått t.ex.

Private Sub SaveData(ByVal Type As Integer)//istället för as SaveType
'kod
End Sub

så skulle man behöva ha en IF som kollar att int:en ligger inom rätt intervall (mellan 1-3) medan om funktionen tar emot en enum istället så behövs inte dennna koll, därav bättre säkerhet..?

Kanske ute o cyklar.. du kanske menade nåt helt annat..? förklara gärna om du har tid :)

Tycker att böckerna tydligt borde förklara sånt här först innan de tar upp massa exempel om * hur * man använder nåt.. tack för input !

GladhMedlem sedan maj 20012 812 inlägg
#7

Du har förstått det helt rätt.

Eftersom man måste skicka in en Enum i funktionen, och det är du som har skapat Enumen så har du begränsat vad man får skicka in i funktionen.

Du slipper alltså den extra check att man har skickat in en INT med värde 1-3 eftersom den enum som skickas in endast kan ha värdet 1-3

- M

CokeLightMedlem sedan juni 2000504 inlägg
#8

Tack för alla svaren.. de hjälpte verkligen :)

258 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
128 ms — hämta forumlista (db)
127 ms — hämta statistik (db)
122 ms — hämta tråd, inlägg och bilagor (db)