0

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

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

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

PS 我在我当前的项目中使用 MVC,但我希望有一个通用的答案,它可以用于许多技术,即设计模式。

4

4 回答 4

2

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
}
于 2013-05-15T11:03:59.440 回答
1

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

您可以从资源中获取文本

var text = normalComment.GetName();


public static class EnumExtension
{
        public static string GetName(this eCommentType type)
        {
            return Strings.ResourceManager.GetString(type.ToString());
        }
}
于 2013-05-15T11:15:07.047 回答
0

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

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

于 2013-05-15T11:04:10.820 回答
0

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

Enum.GetValues,例如:

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

但是,MVC 通常不仅是关于表示,而且还是 UI 和模型之间的绑定,所以通常你需要将屏幕上可见的值映射到枚举的实际值eCommentType 你必须有一些“映射器”来转换一个数据给另一个。

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

于 2013-05-15T11:05:27.603 回答