Il seguente metodo statico generico prende una stringa e restituisce un valore enum.Come posso verificare se un enum è definito o meno ignorando il caso?
E 'ben ignora il caso poiché ho impostato il parametro ignoreCase su true.
Tuttavia, voglio anche prova se l'enum esiste, ma il metodo enum.IsDefined per fare questo non sembra avere un parametro ignoreCase.
Come posso verificare se l'enumerazione è definita o meno e nello stesso caso ignorato?
using System;
namespace TestEnum2934234
{
class Program
{
static void Main(string[] args)
{
LessonStatus lessonStatus = StringHelpers.ConvertStringToEnum<LessonStatus>("prepared");
ReportStatus reportStatus = StringHelpers.ConvertStringToEnum<ReportStatus>("finished");
Console.WriteLine(lessonStatus.ToString());
Console.WriteLine(reportStatus.ToString());
Console.ReadLine();
}
}
public static class StringHelpers
{
public static T ConvertStringToEnum<T>(string text)
{
if (Enum.IsDefined(typeof(T), text)) //does not have ignoreCase parameter
return (T)Enum.Parse(typeof(T), text, true);
else
return default(T);
}
}
public enum LessonStatus
{
Defined,
Prepared,
Practiced,
Recorded
}
public enum ReportStatus
{
Draft,
Revising,
Finished
}
}
È possibile considerare un valore predefinito di Nessuno per le enumerazioni. Oltre ad essere una buona pratica, così com'è ora, se passi una stringa di "Foo" per una delle tue enumerazioni, ottieni ciò che sembra essere un valore valido da ConvertStringToEnum. – Marc