[英]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.