以下通用靜態方法需要字符串並返回枚舉。如何在忽略大小寫的情況下測試枚舉是否定義?
它很好忽略案例因爲我將ignoreCase參數設置爲true。
不過,我也想測試如果枚舉存在,但enum.IsDefined方法做到這一點似乎並不具有IGNORECASE參數。
我該如何測試枚舉是否定義以及是否在相同的忽略情況下?
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
}
}
您可能需要爲枚舉考慮默認值None。除了做法良好之外,就像現在這樣,如果您爲任一枚枚舉傳遞了一串「Foo」,就會從ConvertStringToEnum中看到有效的值。 – Marc 2010-07-01 13:11:00