2009-08-10 5 views
1

Ich versuche, eine Methode schreiben, die einen String-Parameter in eine Enumeration analysiert. Der Typ des Enums wird ebenfalls durch einen Parameter bestimmt. Dies ist, was ich angefangen habe mit:Verwenden von 'Type' und 'Enum' als Parameter in .NET

public static type GetValueOrEmpty(string text, Type type) 
{ 
    if (!String.IsNullOrEmpty(text)) 
    { 
     return (type)Enum.Parse(typeof(type)value); 
    } 
    else 
    { 
     // Do something else 
    } 
} 

Offensichtlich wird dies aus einer Reihe von Gründen nicht funktionieren. Gibt es eine Möglichkeit, dies zu tun?

+1

Für eine Lösung, die nullabe Aufzählungen und zusätzliche Funktionen überprüfen enthält https://gist.github.com/DoggettCK/1305566 –

Antwort

14

Sie können es stattdessen machen generisch, wenn Sie die Art zum Zeitpunkt der Kompilierung wissen:

public static T GetValueOrEmpty<T>(string text) 
{ 
    if (!String.IsNullOrEmpty(text)) 
    { 
     return (T) Enum.Parse(typeof(T), text); 
    } 
    else 
    { 
     // Do something else 
    } 
} 

Wenn Sie nicht wissen, die Art zum Zeitpunkt der Kompilierung, dann das Verfahren, dass Typ zurückgeben, die gewonnen‘ t dir viel nützen. Sie können es object natürlich machen zurück:

public static object GetValueOrEmpty(string text, Type type) 
{ 
    if (!String.IsNullOrEmpty(text)) 
    { 
     return Enum.Parse(type, text); 
    } 
    else 
    { 
     // Do something else 
    } 
} 

Wenn beides nicht nützlich sind, um Sie bitte weitere Informationen geben, was Sie versuchen zu erreichen.

+1

Soll ich deine Antworten noch verbessern? Sie merken wahrscheinlich nicht einmal die +10 mit Ihrem 86k Ruf. ;) –

+0

@SarahVessels: Dein Kommentar ist heute so witzig. –

3

Sie müssen eine generische Methode verwenden. So etwas sollte es tun:

public static TEnum ParseEnum<TEnum>(string s) 
{ 
    return (TEnum)Enum.Parse(typeof(TEnum), s); 
} 

EDIT: Fester Tippfehler im Code ...

+1

Ich möchte gerne eine 'Where TEnum: struct' Typ-Einschränkung für diese Arten von Methoden hinzufügen, um zu versuchen, die Typen zu begrenzen, auf die man zugreifen kann (C# erlaubt keine 'enum' Einschränkung, 'struct' ist die nächstbeste Ding...) – thecoop

Verwandte Themen