将字符串转换为自定义枚举

时间:2012-09-02 12:26:48

标签: c# enums windows-8 microsoft-metro .net-4.5

我正在尝试通过查看另一个对象中保存的字符串值来在自定义对象上设置自定义枚举属性,但我不断收到错误“无法通过表达式引用类型。”

到目前为止我已经尝试了

rec.Course  = (CourseEnum)Enum.Parse(typeof(CourseEnum), rr.course);

其中rec.Course想要一个CourseEnum枚举的成员,而rr.course是一个字符串。

我还尝试做一个switch语句,其中rr.course的值被检查(它只有某些值)但得到相同的结果

枚举定义如下:

public enum CourseEnum
    {
        [StringValue("Starters")]
        Starters,
        [StringValue("Main Course")]
        MainCourse,
        [StringValue("Desserts")]
        Desserts
    };

public class StringValue : System.Attribute
{
    private string _value;

    public StringValue(string value)
    {
        _value = value;
    }

    public string Value
    {
        get { return _value; }
    }

}

public static class StringEnum
{
    public static string GetStringValue(Enum value)
    {
        string output = null;
        Type type = value.GetType();

        //Check first in our cached results...

        //Look for our 'StringValueAttribute' 

        //in the field's custom attributes

        FieldInfo fi = type.GetRuntimeField(value.ToString());
        StringValue[] attrs =
           fi.GetCustomAttributes(typeof(StringValue),
                                   false) as StringValue[];
        if (attrs.Length > 0)
        {
            output = attrs[0].Value;
        }

        return output;
    }
}

2 个答案:

答案 0 :(得分:0)

我可以在您的代码中看到您使用带有CourseEnum的Enum.Parse,我认为它应该是recipeCourse

我无法在示例代码中找到定义了CourseEnum的任何地方。

答案 1 :(得分:0)

@Hans Kesting说,答案就在这里:Why can not reference a type through an expression?

问题是使用枚举类型本身具有枚举类型的字段。