Avatar billede arnejan Nybegynder
14. april 2004 - 04:58 Der er 15 kommentarer og
1 løsning

Hvordan kan man konvertere en int to enum

Hvis jeg har

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};

Days day;
og en
int i = 3;

Hvordan kan jeg så lave en

day = i;

Fordi man kan jo godt gøre det omvendte
day = Days.Sun;
i = day;

????

Jeg ved selvfølgelig godt at jeg kan jokke alle mulighederne igennem, i en løkke. Men er der ikke en stadard måde at løse dette problem på ?
Avatar billede arnejan Nybegynder
14. april 2004 - 05:13 #1
Glem det, jeg fandt ud af det.
Avatar billede burningice Nybegynder
14. april 2004 - 09:39 #2
og for en god ordens skyld:

(Days)Enum.Parse(i, Days, false);
Avatar billede arne_v Ekspert
14. april 2004 - 13:22 #3
cyberfessor>

Har du prøvet ?

Det compiler ikke hos mig.

(Days)Enum.Parse(typeof(Days), ""+i)

gør.

Men umiddelbart vil jeg da mene at det nemmeste er:

day = (Days)i;
Avatar billede burningice Nybegynder
14. april 2004 - 13:31 #4
det burde virke

(Days)Enum.Parse(typeof(Days), i.ToString(), true);

Converts the string representation of the name or numeric value of one or more enumerated constants to an equivalent enumerated object. A parameter specifies whether the operation is case-sensitive.

[Visual Basic]
Overloads Public Shared Function Parse( _
  ByVal enumType As Type, _
  ByVal value As String, _
  ByVal ignoreCase As Boolean _
) As Object

[C#]
public static object Parse(
  Type enumType,
  string value,
  bool ignoreCase
);

[C++]
public: static Object* Parse(
  Type* enumType,
  String* value,
  bool ignoreCase
);

[JScript]
public static function Parse(
  enumType : Type,
  value : String,
  ignoreCase : Boolean
) : Object;

Parameters
enumType
The Type of the enumeration.
value
A string containing the name or value to convert.
ignoreCase
If true, ignore case; otherwise, regard case.
Return Value
An object of type enumType whose value is represented by value.
Avatar billede burningice Nybegynder
14. april 2004 - 13:32 #5
jeg mener ikke at man kan caste fra en int til Enum, kun omvendt, altså

int i = (int)day;
Avatar billede arne_v Ekspert
14. april 2004 - 13:38 #6
Jep

""+i og i.ToString() virker ens.
Avatar billede arne_v Ekspert
14. april 2004 - 13:39 #7
Du kan sagtens caste fra int til Enum. Prøv selv.
Avatar billede burningice Nybegynder
14. april 2004 - 14:56 #8
hvad så med fra string til enum? :) i så fald, så burde man jo ikke bruge Enum.Parse() til noget
Avatar billede burningice Nybegynder
14. april 2004 - 14:58 #9
duh.. ja... string + int = string... dog ser der ikke så pænt ud, synes jeg... og mon ikke også det er hurtigere at bruge i.ToString(), da du ved at bruge ""+i for oprettet en undødig streng til at indeholde i
Avatar billede arne_v Ekspert
14. april 2004 - 15:00 #10
string -> Enum skal bruge Parse, da man ikke kan type caste fra string til en Enum
Avatar billede arne_v Ekspert
14. april 2004 - 15:01 #11
i.ToString er uden tvivl hurtigere end den ""+i
Avatar billede burningice Nybegynder
14. april 2004 - 19:09 #12
mon ikke man kunne forestille sig at (int)Enum bruger Enum.Parse() under "kølerhjælmen" ?
Avatar billede arne_v Ekspert
14. april 2004 - 22:55 #13
Det kan jeg ikke forestille mig.

Hvis man har en int som er 4 byte 0x00 0x00 0x00 0x03 og skal have
det konverteret til en enum med værdi 3 og som også er 4 bytes 0x00 0x00 0x00 0x03,
så tror jeg ikke at man vil konvertere til streng og parse den.

En enum er bare en int (eller anden numerisk type) med lidt smarte
navne og begrænset range.
Avatar billede arne_v Ekspert
14. april 2004 - 23:01 #14
Eller for at citere fra sektion 13.2.2 i C# standarden:

13.2.2 Explicit enumeration conversions
The explicit enumeration conversions are:
• From sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, or decimal to
any enum-type.
• From any enum-type to sbyte, byte, short, ushort, int, uint, long, ulong, char, float,
double, or decimal.
• From any enum-type to any other enum-type.
An explicit enumeration conversion between two types is processed by treating any participating enum-type
as the underlying type of that enum-type, and then performing an implicit or explicit numeric conversion
between the resulting types. [Example: For example, given an enum-type E with and underlying type of int,
a conversion from E to byte is processed as an explicit numeric conversion (§13.2.1) from int to byte,
and a conversion from byte to E is processed as an implicit numeric conversion (§13.1.2) from byte to
int. end example]
Avatar billede mulemule Nybegynder
20. februar 2006 - 13:39 #15
Svar:

enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
Days day;
int i = 3;

day = (Days)i;  <--- !! !
Avatar billede arne_v Ekspert
20. februar 2006 - 17:24 #16
hvorfor poste noget efter 22 maaneder som allerede er skrevet ?

(14/04-2004 13:22:44)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester