c# – 如何在忽略枚举的情况下测试枚举是否被定义?

以下通用静态方法接受一个字符串并返回一个枚举。

它很好地忽略了case,因为我将ignoreCase参数设置为true。

但是,我也想测试枚举是否存在,但是这样做的枚举方法似乎没有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
    }
}
public enum MyEnum
{
    Bar,
    Foo
}

class Program
{
    static void Main(string[] args)
    {
        var containsFoo = Enum.GetNames(typeof(MyEnum)).Any(x => x.ToLower() == "foo");
        Console.WriteLine(containsFoo);
    }
}
http://stackoverflow.com/questions/3157936/how-can-i-test-if-an-enum-is-defined-or-not-whilst-ignoring-case

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c# – 如何在忽略枚举的情况下测试枚举是否被定义?