Feedback

C# - Enum aus Zeichenfolge mit Typ Nullable<Enum> parsen

Veröffentlicht von am 02.01.2014
(0 Bewertungen)
Beim parsen eines Strings in einem Enumerationswert kann man die Enum.Parse bzw. Enum.TryParse-Methode verwenden. Dieser muss als erster Parameter der Typ des Enums übergeben werden. als 2. kommt die zu analysierende Zeichenfolge. Der optionale 3. Parameter gibt an ob die Groß- und Kleinschreibung beachtetwerden soll.

den Typ kann man in einfach mittels typeof bzw. GetType ermitteln. Nun kann es aber vorkommen, das man ein Nullable<Enum> als Typ hat. Diesen Typ kann man aber nicht als Paremeter verwenden, da es ein Nullable und kein Enum ist. Dank der Reflektion kann man den Typ trotzdem ermitteln.

Benötigte Namsepaces
System

Getestete Plattformen
Windows Desktop (.NET 2.0 | VS 2012)
Windows Store Apps (Windows 8 | VS 2012)
Hinweis: IsGenericType muss gegen IsConstructedGenericType getauscht werden.
/// <summary>
/// Analysiert eine Zeichenfolge und erzeugt einen Enumerationswert des angegebenen Typs.<para />
/// <see href="http://dotnet-snippets.de/snippet/enum-aus-string-mit-typeof-nullableenum-parsen/3814" >Enum aus Zeichenfolge mit Typ Nullable&lt;Enum&gt; parsen </see>
/// </summary>
/// <param name="enumType">Der Typ der Enumeration. Dieser kann auch ein <see cref="Nullable{Enum}"/> sein.</param>
/// <param name="value">Die zu analysierende Zeichenfolge.</param>
/// <param name="ignoreCase"><c>True</c>, wen die Groß- und Kleinschreibung nicht beachtet werden soll. Andernfalls <c>False</c>.</param>
/// <returns>Ein Enumerationswert von <paramref name="enumType"/>.</returns>
static Enum ParseNullableEnum(Type enumType, string value, bool ignoreCase)
{
    if (enumType.IsGenericType && enumType.GetGenericTypeDefinition() == typeof(Nullable<>))
        return (Enum)Enum.Parse(Nullable.GetUnderlyingType(enumType), value, ignoreCase);
    else
        return (Enum)Enum.Parse(enumType, value, ignoreCase);
}
Abgelegt unter Reflection, Nullable, Enum, Parse, Generic.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!