oddi Skrevet 17. april 2010 Del Skrevet 17. april 2010 Hei, driver å oppdaterer en klient skrevet i C# der pakkene er definert som enum: enum PServer : byte { //KeyPacket = 0x00, VersionCheck = 0x00, //KeyPacket MTL = 0x01, NS = 0x02, CI = 0x03, UI = 0x04, Attack = 0x05, Die = 0x06, Revive = 0x07 osv... ca 250 element } Ønsker nå å kjøre en test slik at jeg kan beholde kompabiliteten til 2 versjoner som dette: if (Globals.Version == 1) { enum PServer : byte { //KeyPacket = 0x00, VersionCheck = 0x00, //KeyPacket MTL = 0x01, NS = 0x02, CI = 0x03, UI = 0x04, Attack = 0x05, Die = 0x06, Revive = 0x07 osv... ca 250 element } } else { enum PServer : byte { VersionCheck = 0x2E, //KeyPacket MTL = 0x2F, NS = 0x30, CI = 0x31, UI = 0x32, Attack = 0x33 osv } } men vet at det ikke er mulig å endre verdiene i enum uten videre. Finnes det noe brukbart alternativ som har de samme mulighetene som enum (kjører bl.a. en switch på PServer), bare at det går an å endre verdiene? Lenke til kommentar
GeirGrusom Skrevet 18. april 2010 Del Skrevet 18. april 2010 Dictionary klassen. Eksekmpelvis kan du ha en enum: public enum Fields { VersionCheck, MTL, NS, CI, UI, Attack } public static class VersionInterop { public static Dictionary<Fields, byte> GetPSVersion(int version) { var ret = new Dictionary<Fields, byte>(); if(version == 0) { ret.Add(Fields.VersionCheck, 0x00); // etc. } else if(version == 1) { // etc. } } } Det er ikke like effektivt som enum, men ettersom du har et system som uheldigvis ikke er bakoverkompatibelt, kan ikke konstanter som enums brukes. Lenke til kommentar
oddi Skrevet 20. april 2010 Forfatter Del Skrevet 20. april 2010 Dictionary blir litt for treigt til mitt formål, men takk for tipset! Har du noen erfaring med enumbuilder/System.Reflection.Emit? 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å