La méthode statique générique suivante prend une chaîne et renvoie une enum.Comment puis-je tester si une énumération est définie ou non tout en ignorant le cas?
Il joliment ignore le cas depuis que j'ai défini le paramètre ignoreCase sur true.
Cependant, je veux aussi test si le ENUM existe, mais la méthode enum.IsDefined faire cela ne semble pas avoir un paramètre ignoreCase.
Comment puis-je tester si l'énumération est définie ou non et dans le même cas d'ignorance?
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
}
}
Vous pouvez envisager une valeur par défaut de None pour vos énumérations. En plus d'être une bonne pratique, telle qu'elle se présente actuellement, si vous passez une chaîne de "Foo" pour l'une ou l'autre de vos énumérations, vous obtenez ce qui semble être des valeurs valides de ConvertStringToEnum. – Marc