Feedback

Enum aus Zeichenfolge mit Typ Nullable parsen

Sprache: C#

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. [b]Benötigte Namsepaces[/b] System [b]Getestete Plattformen[/b] Windows Desktop (.NET 2.0 | VS 2012) Windows Store Apps (Windows 8 | VS 2012) [b]Hinweis: [/b]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);
}
/// <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<Enum> 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);
}