首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Enum上的参数化描述属性

Enum上的参数化描述属性
EN

Stack Overflow用户
提问于 2018-04-17 14:53:53
回答 2查看 68关注 0票数 2

我有一个商业子码提供的枚举。不幸的是,我意识到枚举值的描述在用户之间是不同的。

这是我在一个完美的世界中试图实现的目标,但我知道在运行时不能更改属性值。

代码语言:javascript
复制
public enum BusinessSubcodesEnum
{
    [Representation(@"Cannot charge customers basket. No default currency set for user: {0}.")]
    DefaultCurrencyNotSet = 18        
}

值得注意的是,上面有上百个这样的子代码,所以我真的很想避免使用BusinessCode和Description字段的上百个类。我怎样才能克服这一切?摘要/通用类?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-17 15:09:24

据我所知,您只能使用编译时常量作为任何属性的值。

虽然我在官方文档中找不到这一点,但我确实从Microsoft中的应用属性页面找到了支持这一说法的证据:

在编译代码时,该属性将被发送到元数据中。

来自使用属性扩展元数据页面:

属性允许您将额外的描述性信息放入可以使用运行时反射服务提取的元数据中。当您声明从System.Attribute派生的特殊类的实例时,编译器会创建属性。

但是,您可以使用像Dictionary<BusinessSubcodesEnum, string>这样简单的东西来存储enum成员的描述,当然,运行时更改没有问题。

票数 1
EN

Stack Overflow用户

发布于 2018-04-17 15:23:02

听起来现在是使用“强类型枚举”的好时机。这是一种类似于常规枚举的结构,但它可以缓解枚举所具有的行为缺陷。

创建一个类BusinessSubCode并在该类中创建相同类型的静态属性。现在,您可以使用相同的行为,即BusinessSubCode.DefaultCurrencyNotSet,并访问这些静态属性的属性。

代码语言:javascript
复制
public class BusinessSubCode 
{
    public static BusinessSubCode DefaultCurrencyNotSet { Representation = "Enter text here", Value = 18 };
    public static BusinessSubCode DefaultCurrencySet { Representation = "Enter other text here", Value = 28 };

    public string Representation {get;}
    public int Value {get;}
}

您还可以重写ToString()方法,并使用其他技巧使其行为像枚举,但具有扩展的功能。查看这个伟大的博客文章获得更多和更好的源代码。

您可以像往常一样向类添加任何属性和方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49881350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档