[Tip] Come convertire una stringa in un enumerativo

Mi piace molto usare gli enum per dare pulizia al codice e non rischiare di commettere errori. Ma quando bisogna convertire una stringa in un enum che fare? Come al solito ci viene in aiuto il buon framework .Net. Fingiamo di avere un enumerativo che elenca le marche di alcune automobili

   1: public enum CarMakes
   2:     {
   3:         BMW,
   4:         Ford,
   5:         GeneralMotors,
   6:         GruppoFiat,
   7:         Honda,
   8:         Hyundai,
   9:         KiaMotors,
  10:         Mazda,
  11:         Mitsubishi,
  12:         Nissan,
  13:         Renault,
  14:         Suzuki,
  15:         Toyota,
  16:         Volkswagen,
  17:     }

E mi viene data la marca “Ford” come posso convertirla nel enumerativo CarMakes.Ford ?

   1: object Enum.Parse(System.Type enumType, string value, bool ignoreCase)

Questo sembra proprio fare al caso nostro

   1: CarMakes makes = (CarMakes) Enum.Parse(typeof(CarMakes), "Ford", true)

Ma se non siamo sicuri che possa esistere? Nulla di male

   1: var makeNotExist = "SonnyMake";
   2:            if (Enum.IsDefined(typeof(CarMakes), makeNotExist))
   3:            {
   4:                CarMakes makes = (CarMakes)Enum.Parse(typeof(CarMakes), makeNotExist, true);
   5:                Console.WriteLine(makes);
   6:            }
   7:            else
   8:                Console.WriteLine("Ops Error!");

Be la prossima volta mi compro una casa automobilistica così sono sicuro. ;)

Sonny

XmlSerializer perché no?

Oggi mi è capitata una cosa curiosa. Stavo lavorando sul mio “solito” database xml nativo ( ormai sono quasi 7 anni che ci “combatto”) e un mio collaboratore mi mostra un pezzo di codice che salva la entity Customer creandola con XmlDocument. Chiunque abbia messo mani sul formato xml ha dovuto fare i conti con questa classe. Mi spiego meglio, salvare la classe creando “a mano“ tutte le proprietà (document.CreateElement, document.CreateAttribute ecc) per poi fare il contrario recuperandola. Mi sa tanto di serializzazione dico io. Così ho scritto una classe di serializzazione e deserializzazione che fa lo stesso lavoro ma per qualsiasi entità.

   1: public static class StoringState<T>
   2:     {
   3:         public static string SerializeObject(object pObject)
   4:         {
   5:             
   6:                 var xmlSerializer = new XmlSerializer(typeof(T));
   7:  
   8:                 using (var stringWriter = new StringWriter())
   9:                 {
  10:                     xmlSerializer.Serialize(stringWriter, pObject);
  11:                     return stringWriter.ToString();
  12:                 }
  13:             
  14:         }
  15:  
  16:         public static object DeserializeObject(string pXmlizedString)
  17:         {
  18:             
  19:                 var xmlSerializer = new XmlSerializer(typeof(T));
  20:  
  21:                 using (var stringReader = new StringReader(pXmlizedString))
  22:                     return (T)xmlSerializer.Deserialize(stringReader);
  23:             
  24:         }
  25:     }

Spesso i tempi stretti e la pigrizia ci impediscono di studiare meglio il nostro amato Framework e che dire XmlSerializer c’è dalla versione 2.0.

S.