Tegyük fel, hogy van egy ilyen enumerációnk:
enum Fruit
{
Apple,
Pear,
Grape
}
Amennyiben valahonnan egy ilyen enum értéket sztringként kaptunk meg (tehát pl. volt egy olyan sztringünk, hogy "Apple"), és azt szerettük volna a konkrét enum értékke alakítani, az Enum.Parse() statikus metódushoz fordulhattunk segítségért:
public static void ParseEnum(string fruitName) { Fruit fruit = default(Fruit); bool parsingSuccesful; try { fruit = (Fruit)Enum.Parse(typeof(Fruit), fruitName); parsingSuccesful = true; } catch (ArgumentException) { parsingSuccesful = false; } if (parsingSuccesful) { Console.WriteLine("Enum parsed succesfully, value: {0}.", fruit); } else { Console.WriteLine("Enum couldn't be parsed."); } }
Működni működik, de elég cifra kód. A Framework 4.0 Base Class Library-jében kapunk egy új, generikus metódust, a TryParse(), amivel jóval egyszerűbbé és érthetőbbé válik a kód:
public static void ParseEnum40(string fruitName) { Fruit fruit; if (Enum.TryParse(fruitName, out fruit)) { Console.WriteLine("Enum parsed succesfully, value: {0}.", fruit); } else { Console.WriteLine("Enum couldn't be parsed."); } }Külön szépség, hogy bár az Enum.TryParse() egy generikus metódus (tehát valójában az Enum.TryParse<Fruit>()-ot hívjuk), de a típusparamétert - mivel az ugyanaz, mint a második függvényparaméter, az out fruit típusa -, nem kell kiírnunk, a fordító kiinferálja nekünk.
Mindennek ellenére, hogy most már ilyen rettenetesen könnyű és szép enumokkal dolgozni, azért azt tartsuk észben, hogy az enum-sztring konverzió elég lassúcska, teljesítményérzékeny alkalmazásokban néha rá kell programoznunk, ha nem akarunk odaborostásodni a gép elé.

2 megjegyzés: