无法从其StringValue属性解析为枚举对象。

枚举:

public enum StatusColor
{
    [StringValue("#FFFFFF")]
    None,

    [StringValue("#5DB516")]
    Green,

    [StringValue("#F3212A")]
    Red,

    [StringValue("#FFFFFF")]
    White
}


解析尝试1

string inputHtmlColor = "#F3212A"; // input
StatusColor outColor; // output
Enum.TryParse(inputHtmlColor , true, out outColor);


解析尝试2:

string inputHtmlColor = "#F3212A"; //input
StatusColor outColor = Enum.Parse(typeof(StatusColor), inputHtmlColor, true);


这两个代码都不起作用,代码始终选择StausColor.None(第一个)。如何获得正确的StatusColor枚举对象?

最佳答案

应该这样做:

public StatusColor GetColor(string color)
{
    return
        Enum.GetValues(typeof(StatusColor))
            .Cast<StatusColor>()
            .First(x => ((StringValueAttribute)typeof(StatusColor)
                        .GetField(x.ToString())
                        .GetCustomAttribute(typeof(StringValueAttribute))).Value == color);
}

10-01 00:23