Gå til innhold

Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet

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.

 




			
		
Skrevet

Dictionary blir litt for treigt til mitt formål, men takk for tipset!

Har du noen erfaring med enumbuilder/System.Reflection.Emit?

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...