相关疑难解决方法(0)

3015
推荐指数
32
解决办法
128万
查看次数

扩展枚举,矫枉过正?

我有一个需要序列化为EDI格式的对象.对于这个例子,我们会说它是一辆汽车.汽车可能不是b/c选项随时间变化的最佳示例,但对于真实对象,Enums永远不会改变.

我有许多枚举,如下所示,应用了自定义属性.

public enum RoofStyle
{
    [DisplayText("Glass Top")]
    [StringValue("GTR")]
    Glass,
    [DisplayText("Convertible Soft Top")]
    [StringValue("CST")]
    ConvertibleSoft,
    [DisplayText("Hard Top")]
    [StringValue("HT ")]
    HardTop,
    [DisplayText("Targa Top")]
    [StringValue("TT ")]
    Targa,
}
Run Code Online (Sandbox Code Playgroud)

通过扩展方法访问属性:

public static string GetStringValue(this Enum value)
{
    // Get the type
    Type type = value.GetType();

    // Get fieldinfo for this type
    FieldInfo fieldInfo = type.GetField(value.ToString());

    // Get the stringvalue attributes
    StringValueAttribute[] attribs = fieldInfo.GetCustomAttributes(
        typeof(StringValueAttribute), false) as StringValueAttribute[];

    // Return the first if there was a match.
    return attribs.Length > 0 ? attribs[0].StringValue …
Run Code Online (Sandbox Code Playgroud)

c# extension-methods enums attributes

4
推荐指数
1
解决办法
2792
查看次数

标签 统计

c# ×2

enums ×2

attributes ×1

casting ×1

extension-methods ×1