Akadémia alcsoport

Keresés

Enum.TryParse Nyíl

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