如何向枚举类型添加多个属性?

17

我有一个名为ClientCreditResolutionPlanActionType的SQL 查询表,我想将其转换为中。

非常基本的请求,对吧? 对。

现在我的表已经成为, 然而它有几个列或者说是一些描述属性需要与之相关:

  • StatusIcon
  • StatusText
  • TypeText

所以我想我可以做...

namespace System.ComponentModel
{
    class StatusIconAttribute : Attribute
    {
        public string StatusIcon;
        public StatusIconAttribute(string statusIcon) { StatusIcon = statusIcon; }
    }

    class StatusTextAttribute : Attribute
    {
        public string StatusText;
        public StatusTextAttribute(string statusText) { StatusText = statusText; }
    }

    class TypeTextAttribute : Attribute
    {
        public string TypeText;
        public TypeTextAttribute(string typeText) { TypeText = typeText; }
    }
}

... 在我的 Extensions.cs 类中 ...

public static class EnumExtensions
{
    public static string GetStatusIcon(this Enum value)
    {
        var type = value.GetType();

        string name = Enum.GetName(type, value);              
        if (name == null) { return null; }

        var field = type.GetField(name);
        if (field == null) { return null; }

        var attr = Attribute.GetCustomAttribute(field, typeof(StatusIconAttribute)) as StatusIconAttribute;
        if (attr == null) { return null; }

        return attr.StatusIcon;
    }

    public static string GetStatusText(this Enum value)
    {
        var type = value.GetType();

        string name = Enum.GetName(type, value);              
        if (name == null) { return null; }

        var field = type.GetField(name);
        if (field == null) { return null; }

        var attr = Attribute.GetCustomAttribute(field, typeof(StatusTextAttribute)) as StatusTextAttribute;
        if (attr == null) { return null; }

        return attr.StatusText;
    }

    public static string GetTypeText(this Enum value)
    {
        var type = value.GetType();
        string name = Enum.GetName(type, value);              

        var type = value.GetType();

        string name = Enum.GetName(type, value);              
        if (name == null) { return null; }

        var field = type.GetField(name);
        if (field == null) { return null; }

        var attr = Attribute.GetCustomAttribute(field, typeof(TypeTextAttribute)) as TypeTextAttribute;
       if (attr == null) { return null; }

        return attr.TypeText;
    }
}

...最后在我的另一个项目中像这样使用它:

namespace ClientSystemServiceLibrary.Enums
{
    [DataContract]
    public enum ClientCreditResolutionPlanActionType
    {
        [EnumMember]
        [TypeText("New resolution plan submitted.")]
        [StatusText("New Plan")]
        [StatusIcon("star.png")]
        NewPlan = 1,

        [EnumMember]
        [TypeText("Resolution plan waiting on approval.")]
        [StatusText("Under Review")]
        [StatusIcon("review.png")]
        UnderReview = 2,

        [EnumMember]
        [TypeText("Resolution plan approved.")]
        [StatusText("Approved")]
        [StatusIcon("check.png")]
        Approved = 3,

        [EnumMember]
        [TypeText("Resolution plan rejected.")]
        [StatusText("Rejected")]
        [StatusIcon("cross.png")]
        Rejected = 4,

        [EnumMember]
        [TypeText("New resolution plan comment submitted.")]
        [StatusText("New Comment")]
        [StatusIcon("message.png")]
        NewComment = 5
    }
}E

除此之外,我所想的都是错误的,因为我收到了这些错误信息:
'System.CompenentModel.TypeTextAttribute' 因其保护级别而无法访问。
以及
找不到类型或命名空间名称'TypeText'(您是否缺少 using 指令或程序集引用?)
对于所有三个相同的错误。

1
你是什么意思,"我想错了"? - Blorgbeard
1
为什么要转换为枚举类型?为什么不直接从表中读取? - Brad
@Brad - 因为它是 Silverlight 在 UI 上,我现在可以绑定到该特定属性。这使得 UI 方面的工作变得更加容易。 - Code Maverick
如何获取这些属性的值? - Jitendra Pancholi
@JitendraPancholi 如果您进一步查看我的问题,您可以在DataContract示例中看到它的用法。 - Code Maverick
显示剩余3条评论
1个回答

20

默认情况下,所有类都是内部的。如果您想从其他程序集中访问它们,应指定"public"访问修饰符。如下所示:

默认情况下,所有类都是内部的。如果您想从其他程序集中访问它们,应指定"public"访问修饰符。如下所示:

public class TypeTextAttribute : Attribute
{
    public string TypeText;
    public TypeTextAttribute(string typeText) { TypeText = typeText; }
}

1
我刚才做了同样的事情...我不能将你的答案标记为最佳答案,因为我在那之前就解决了问题,但我一定会点赞。 - Code Maverick
8
哦,算了吧...我会删除我的东西并给你支票 =D - Code Maverick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接