【发布时间】:2010-07-01 12:52:40
【问题描述】:
以下通用静态方法采用 string 并返回 enum。
很好地忽略大小写,因为我将 ignoreCase 参数设置为 true。
不过,我也想测试枚举是否存在,但执行此操作的 enum.IsDefined 方法似乎没有 ignoreCase 参数。 p>
如何测试枚举是否已定义并同时忽略大小写?
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 中获得看似有效的值。
标签: c# enums case-sensitive