Przejdź do treści

DevStyle - Strona Główna
String.ToEnum<>
Backend

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>()

Zobacz również