将字符串中的值分配给枚举数据成员

时间:2015-03-11 18:11:50

标签: c#

我有一个名为MettingRoom的课程。

其数据成员如下:

Boolean hasProjector,
PropertyOptions property

PropertyOptions就像这样

public enum PropertyOptions
{        
    [EnumMember]
    Off = 0,        
    [EnumMember]
    Automatic = 1,        
    [EnumMember]
    On = 2,
}

现在我有一个函数来为这些数据成员设置值

MeetingRoom setOptions(string hasProjectorValue, string propertyValue)
{        
    return new MeetingRoom()
    {                    
        hasProjector = bool.Parse(hasProjectorValue),
        property = ???,        
    }
}

属性值可以是On,Off,Automatic。 我的问题是如何为数据成员'属性'?

分配值

2 个答案:

答案 0 :(得分:1)

您需要通过解析将propertyValue字符串转换为PropertyOptions枚举:

property = (VotingValue)Enum.Parse(typeof(PropertyOptions), propertyValue);

但是,如果解析失败,上面将抛出异常。您可能希望使用Enum.TryParse代替:

MeetingRoom setOptions(string hasProjectorValue, string propertyValue)
{
    PropertyOptions prop;

    Enum.TryParse(propertyValue, true, out prop)

    return new MeetingRoom()
    {                    
        hasProjector = bool.Parse(hasProjectorValue),
        property = prop
    }
}

请参阅MSDN

答案 1 :(得分:0)

如果Enum.TryParse不够(例如你需要映射过时的值),那么使用某种映射是个不错的主意,即

static class PropertyOptionsConvertor
{
    private static Dictionary<string, PropertyOptions>() Mapping = new Dictionary<string, PropertyOptions>(StringComparer.OrdinalIgnoreCase)
    {
        { "on",    PropertyOptions.On },
        { "off",   PropertyOptions.Off },
        // other members...
    };

    public static bool GetOptions(string value, out PropertyOptions result)
    {
        if (Mapping.TryGetValue(value, out result))
        {
            return true;
        }

        result = default(PropertyOptions);
        return false;
    }
}

您也可以制作一个通用版本,并将其映射到任何事情。然后通过构造函数提供内部映射。