HDSoftware Skrevet 6. mai 2008 Del Skrevet 6. mai 2008 Heisan folkens Jeg sitter og lager et program som skal håndtere innstillinger for et annet program jeg lager i Clarion. Det jeg har gjort er å etterligne registeret og dermed har jeg metoder som GETREG og PUTREG. Problemet er at i Clarion programmet så har jeg brukt konstanter som inneholder større verdier en ENUM klarer. Dette for å gjøre dette kompatibelt med Registry. Verdiene er som følger: public enum Reg { CLASSES_ROOT = 0x80000000, CURRENT_USER = 0x80000001, LOCAL_MACHINE = 0x80000002, USERS = 0x80000003, PERFORMANCE_DATA = 0x80000004, CURRENT_CONFIG = 0x80000005, DYN_DATA = 0x80000006 } Disse verdiene resulterer i en "Cannot implicitly convert type 'uint' to 'int'" på alle elementene og jeg gjetter dermed på at verdiene er for store til å legge inn i en ENUM. Finnes det noen alternativer til slike konstanter? Ole Lenke til kommentar
GeirGrusom Skrevet 6. mai 2008 Del Skrevet 6. mai 2008 public enum Reg : uint { CLASSES_ROOT = 0x80000000, CURRENT_USER = 0x80000001, LOCAL_MACHINE = 0x80000002, USERS = 0x80000003, PERFORMANCE_DATA = 0x80000004, CURRENT_CONFIG = 0x80000005, DYN_DATA = 0x80000006 } C# er flotte greier Lenke til kommentar
steingrim Skrevet 6. mai 2008 Del Skrevet 6. mai 2008 (endret) Hvis jeg husker korrekt så arver Enum default fra int. Du kan jo arve den fra uint eller long om du heller vil det, det vil vel løse problemet. public enum Reg : long { } EDIT: Blæh, et minutt for sent ute gitt. Endret 6. mai 2008 av steingrim Lenke til kommentar
HDSoftware Skrevet 6. mai 2008 Forfatter Del Skrevet 6. mai 2008 (endret) public enum Reg : uint { CLASSES_ROOT = 0x80000000, CURRENT_USER = 0x80000001, LOCAL_MACHINE = 0x80000002, USERS = 0x80000003, PERFORMANCE_DATA = 0x80000004, CURRENT_CONFIG = 0x80000005, DYN_DATA = 0x80000006 } C# er flotte greier Ja! Det er f... så bra!! hehe Må vel takke deg også da ;-) Ole Endret 6. mai 2008 av HDSoftware Lenke til kommentar
HDSoftware Skrevet 6. mai 2008 Forfatter Del Skrevet 6. mai 2008 Ganske pussig, men Byte og byte er ikke det samme. Prøvde akkurat å lage en ENUM basert på en Byte public enum LEVEL : Byte { Benign, User, Program, Fatal, Cancel, Notify } men det feilet fordi den forventet en byte. Jeg har alltid trod at 'Byte' var foretrukkent i forhold til 'byte' Hva er egentlig regelen her? Jeg har hele tiden prøvd å holde meg til de med stor forbokstav. Ole Lenke til kommentar
Manfred Skrevet 6. mai 2008 Del Skrevet 6. mai 2008 Byte er vel en C#-klasse, mens byte er en primitiv (selv om denne oppfører seg som en klasse i C#) Lenke til kommentar
HDSoftware Skrevet 6. mai 2008 Forfatter Del Skrevet 6. mai 2008 Byte er vel en C#-klasse, mens byte er en primitiv (selv om denne oppfører seg som en klasse i C#) HUH?? Kan en klasse ha en verdi? Ser jo at jeg får alternativer hvis jeg trykker en . rett etter en byte eller Byte. Er det mulig å lage slike klasser selv også? uhnm, glem det. Byte er jo ikke en variabel, men en type og kan derav ikke ha en verdi. Ser poenget. Lenke til kommentar
steingrim Skrevet 6. mai 2008 Del Skrevet 6. mai 2008 Byte med stor B er vel strengt tatt ikke en klasse, men en struct. byte med liten b er bare et synonym for Byte med stor B i C#. Lenke til kommentar
HDSoftware Skrevet 6. mai 2008 Forfatter Del Skrevet 6. mai 2008 Jaha? Så hvorfor forventer da en ENUM et byte og ikek en Byte? Skulle jo tro det var motsatt Lenke til kommentar
GeirGrusom Skrevet 6. mai 2008 Del Skrevet 6. mai 2008 Fordi det er en del av standarde, enum tar kun de primitive verdiene, dette har med compileren og slikt å gjøre. Du skal egentlig bare bruke byte, int etc. og ikke System.Byte eller System.Integer. Lenke til kommentar
HDSoftware Skrevet 6. mai 2008 Forfatter Del Skrevet 6. mai 2008 Takker for den GeirGrusom Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå