繁体   English   中英

将标签附加到枚举值的最佳方法是什么

[英]What is the best way to attach a label to an enum value

可以说我有一个枚举定义,如下所示:

    public enum eCommentType
    {
        NormalComment = 0,
        OpenningComment = 1,
        StartProgressCommetn = 2,
        ClouserComment = 3,
        ReopennignComment = 4
    }

现在,我想在网页上显示enum选项。 我可以只使用switch语句,但是当我添加一个新值时,我将不得不更新我的switch语句。 将标签附加到每个值或事件,更好地使用资源ID以支持多语言界面的最佳方法是什么?

PS:我在当前项目中使用MVC,但我希望能获得可用于多种技术(即设计模式)的一般答案。

事件更好的资源ID以支持多语言界面?

您可以从资源获取文本

var text = normalComment.GetName();


public static class EnumExtension
{
        public static string GetName(this eCommentType type)
        {
            return Strings.ResourceManager.GetString(type.ToString());
        }
}

to字符串返回枚举的名称,或者您可以为每个枚举使用标签[Description(“ yournamehere”)],并使用

public enum eCommentType
{
    [Description("my super normal comment")]
    NormalComment = 0,
    [Description("my super opening comment")]
    OpenningComment = 1,
    [Description("etc")]
    StartProgressCommetn = 2,
    [Description("etc")]
    ClouserComment = 3,
    [Description("etc")]
    ReopennignComment = 4
}

在.net世界中,您可以通过向枚举添加属性并实现自定义类型转换器来解决此问题,该转换器可以使用属性的资源ID将对应的枚举值转换为本地化文本

此方法与Fabio Marcolini提供的方法基本相同,不同之处在于,自定义类型转换器将使描述可本地化。

如果您需要显示内部项目的描述以显示给用户,则可以使用:

Enum.GetValues ,例如:

var values = Enum.GetValues(typeof(eCommentType)); 

但尽管如此,MVC是不是通常只有约演示,也UI和模型之间的结合,所以通常你需要映射屏幕的实际值上可见值eCommentType枚举你必须有一个转换一个有些“映射”数据到另一个。

是的,您还可以使用迭代所有可用值并找到请求的函数的相同函数,在得到它后,它是INT,但是老实说,除非枚举值数量变大,否则我将进行简单明了的switch/case

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM