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é.
A teljes bejegyzést itt olvashatod: http://feedproxy.google.com/~r/OtPercDotnet/~3/_2eG_hc-zBg/enumtryparse.html
Elküldve
2010. 01. 08. 08:22
by
öt perc dotnet
Megtekintve:
246
alkalommal