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

时间:2013-05-15 11:00:13

标签: c# asp.net-mvc design-patterns language-agnostic enums

假设我有一个这样的枚举定义:

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

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

P.S 我将MVC用于我当前的项目,但我希望能够在许多技术中使用的一般答案,即设计模式。

4 个答案:

答案 0 :(得分:1)

  

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

您可以从资源中获取文字

var text = normalComment.GetName();


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

答案 1 :(得分:0)

to string返回枚举的名称,或者你可以为每个枚举使用标签[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
}

答案 2 :(得分:0)

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

这种方法与Fabio Marcolini提供的方法基本相同,只是自定义类型转换器会使描述可以本地化

答案 3 :(得分:0)

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

Enum.GetValues ,如:

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

但是,MVC通常不只是关于表示,而是UI和模型之间的绑定,所以通常你需要在屏幕上显示的 map 实际值 of eCommentType enum你必须有一些“mapper”将一个数据转换为另一个数据。

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