我需要我的枚举将格式化的字符串返回到视图,例如:
public enum status
{
NotStarted,
InProgress,
}
返回:Not Started
和In Progress
。我是怎么做到的谢谢(语言C#)
答案 0 :(得分:2)
枚举不要这样做。您需要提供枚举值的映射来显示字符串,或者您可以执行一些操作,例如使用您可以使用的显示字符串定义属性(这需要一些繁琐的反射来获取给定枚举值的属性,但是具有以下优点:您可以在定义枚举值的位置定义显示名称。
例如,您可以使用Dictionary<status,string>
映射它们:
var myMap = new Dictionary<status,string>()
{
{ status.NotStarted, "Not Started" },
{ status.InProgress, "In Progress" }
};
现在要获取给定状态值s
的显示字符串,您只需执行以下操作:
var s = status.NotStarted;
var displayString = myMap[s]; // "Not Started"
当然,你把它放在某个地方,所以它只在一个地方定义一次。
另一种相当脆弱,快速和肮脏的方法是利用你的枚举名称是Pascal的事实,并使用类似正则表达式的东西来获取枚举名称并插入额外的空格。但那非常黑客。所以你可以这样做:
var r = new Regex("([A-Z][a-z]*)([A-Z][a-z]*)");
var displayString = r.Replace(s.ToString(),"$1 $2"); // "Not Started"
但是这会阻碍任何不符合两个Pascal语言模式的枚举值。当然,你可以让你的正则表达式更灵活,但这超出了问题的范围。
答案 1 :(得分:1)
在emum值上调用ToString
相当于Enum.GetName,它将为您提供命名值,即
Console.WriteLine(status.NotStarted.ToString()) // NotStarted
从那里开始,假设格式是一致的,你可以将字符串从Pascal大小写转换为以空格分隔的字符串,例如。
string result = Regex.Replace(status.NotStarted, "([a-z])([A-Z])", "$1 $2");
Console.WriteLine(result); // Not Started
答案 2 :(得分:0)
Enum.GetName(typeof (Status), Status.InProgress));