Mając wartość enuma w postaci napisowej, pobraną na ten przykład z bazy, bardzo łatwo jest z powrotem sparsować ją do właściwego dla aplikacji typu:
1: public enum MyEnum
2: {
3: FirstVal,
4: SecondVal
5: }
6:
7: (MyEnum)Enum.Parse(typeof(MyEnum), "FirstVal");
Powtarzanie tego w kodzie jest jednak dość męczące. I po raz kolejny świetny mechanizm Extension methods przychodzi na ratunek:
1: public static class StringExtensions
2: {
3: public static TEnum ToEnum<TEnum>(this string _this) where TEnum : struct
4: {
5: return (TEnum)Enum.Parse(typeof(TEnum), _this, true);
6: }
Zwracam uwagę na warunek nałożony na parametr generyczny (where TEnum : struct). Wszystkie typy wyliczeniowe dziedziczą z value-types, dzięki temu już na etapie kompilacji otrzymujemy pewną (choć nie 100%-ową) weryfikację przekazywanego typu - ponieważ "jeśli jest to typ referencyjny to nie jest enumem".
A efekt końcowy o ile ładniejszy od poprzedniego:
1: "FirstVal".ToEnum<MyEnum>()