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:
Persze, hogy cifra, ha azzá teszed :)
public static void ParseEnum(string fruitName)
{
Fruit fruit = default(Fruit);
try
{
fruit = (Fruit)Enum.Parse(typeof(Fruit), fruitName);
Console.WriteLine("Enum parsed succesfully, value: {0}.", fruit);
}
catch (ArgumentException)
{
Console.WriteLine("Enum couldn't be parsed.");
}
}
Persze a .NET4-es kód gyorsabb, mert nem használ exceptiont.
Jóhogy cifrává teszem, ha azt akarom bemutatni, hogy cifra.. :)
Megjegyzés küldése