El siguiente método genérico estático toma cadena y devuelve enumeración.¿Cómo puedo verificar si una enumeración está definida o no mientras ignoro el caso?
Es muy bueno ignora el caso ya que establecí el parámetro ignoreCase en verdadero.
Sin embargo, también quiero prueba si existe la enumeración, pero no parece el método enum.IsDefined hacer esto para tener un parámetro deignoreCase.
¿Cómo puedo comprobar si la enumeración está definida o no y, al mismo tiempo, ignorar el caso?
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
}
}
Es posible que desee considerar un valor predeterminado de Ninguno para sus enumeraciones. Además de ser una buena práctica, tal como está ahora, si pasas una cadena de "Foo" para cualquiera de tus enums, obtienes lo que parecen ser valores válidos de ConvertStringToEnum. – Marc