[c#] Casten naar user-defined type opgeslagen als String

Pagina: 1
Acties:

  • ThaLaw
  • Registratie: Maart 2001
  • Laatst online: 25-11 09:41
Ik ben op zoek naar een oplossing voor het volgende probleem:

Ik heb een eventhandler, waar als arguments 2 integers binnenkomen:
inPropertyID en inValue

Ergens heb ik een gigantische waslijst met allerlei enums, en afhankelijk van welk type propertyid ik binnenkrijg, wil ik value als een van die enums interpreteren.
Het leek mij handig om dan een hastable te maken, met als key de propertyid, en als value een string met de naam van de bijbehorende enum.
Bijvoorbeeld:
code:
1
2
mijnGroteHashtable.Add(0x1234, "enumSaveModes");
...


waarbij:
code:
1
2
3
4
5
6
        public enum enumSaveModes : uint 
        {
            Camera  =  1,
            Host    =  2,
            Both    =  3,
        }



Ik wil nou dus in de eventhandler, d.m.v. een lookup in mijnGroteHashtable een string terugkrijgen met daarin de naam van het type enum, en dan vervolgens inValue casten als die enum om zodoende de omschrijving als string weer te kunnen gebruiken (stel dat inValue 2 is, wil ik "Host" terugkrijgen)

Op dat laatste stukje stand ik dus...Hoe cast ik naar een type, waarvan ik alleen de naam in een string heb?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Sla dan gewoon het Type van de Enum op en gebruik Enum.Parse of Convert.ChangeType. Dan hoef je niet met strings te werken.

Maar ik heb het idee dat je iets heel vreemds aan het doen bent. Wat is het nut van iets ergens naartoe casten als je niet weet wat het is?

[ Voor 44% gewijzigd door Woy op 05-06-2007 14:04 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Kijk eens naar Reflection, want wat je nu doet is imho nogal omslachtig.

Je kan bv ipv een integer aan je method te passen, een 'enum' passen.
Dan kan je mbhv reflection te weten komen van welk type die 'enum' is, en zo aan de naam geraken:
code:
1
2
3
4
5
6
7
8
9
private void MyMethod( Enum e )
{
     GetEnumName (e);
}

private void GetEnumName( Enum e )
{
     Console.WriteLine (Enum.GetName (e.GetType(), e));
}

https://fgheysels.github.io/


  • ThaLaw
  • Registratie: Maart 2001
  • Laatst online: 25-11 09:41
rwb schreef op dinsdag 05 juni 2007 @ 14:00:
Sla dan gewoon het Type van de Enum op en gebruik Enum.Parse of Convert.ChangeType. Dan hoef je niet met strings te werken.

Maar ik heb het idee dat je iets heel vreemds aan het doen bent. Wat is het nut van iets ergens naartoe casten als je niet weet wat het is?
|:( |:( |:(

@rwb: Thanx!. Werkt perfect op die manier!

@whoami en rwb: Het punt is dat ik in mijn eventhandler alleen twee argumenten van het type uint binnenkrijg. Ik weet dus op het moment van uitvoeren helemaal nog niet hoe ik argument inValue moet interpreteren. Pas als ik kijk naar InPropertyID, weet ik wat de waarde betekent in InValue, en dan pas kan ik de bijbehorende naam gaan zoeken en dat geeft de integer waarde in InValue betekenis.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Zeker in combinatie met \[C#] Naam van object nodig, maar reflection lukt niet. denk ik dat je iets heel omslachtigs aan het doen bent. Maar aangezien ik niet weet wat je precies aan het doen bent is dat nogal moeilijk te beoordelen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • ThaLaw
  • Registratie: Maart 2001
  • Laatst online: 25-11 09:41
rwb schreef op dinsdag 05 juni 2007 @ 14:38:
Zeker in combinatie met \[C#] Naam van object nodig, maar reflection lukt niet. denk ik dat je iets heel omslachtigs aan het doen bent. Maar aangezien ik niet weet wat je precies aan het doen bent is dat nogal moeilijk te beoordelen.
Je hebt op zich wel gelijk ;)

Dit komt omdat ik werk vanaf een basis, e.o.a. SDK... en die zit gewoon niet lekker in elkaar, zelf had ik dat helemaal anders gedaan.
Het kost me teveel tijd om die helemaal te refactoren nu, maar de ene keer worden er enums gebruikt, dan weer constanten, niet eenduidige namen, de ene keer gebruiken ze hex notatie, dan weer decimaal... een beetje een rotzooitje dus.

Ik probeer een wrapper te maken, zodat in ieder geval al mijn applicaties die die classlib gaan gebruiken op een eenduidige manier aan die gegevens kunnen komen, zonder zich druk te maken over hoe...
Pagina: 1