如何格式化枚举?

时间:2015-11-25 15:46:18

标签: c# model-view-controller enums

我需要我的枚举将格式化的字符串返回到视图,例如:

public enum status
{ 
   NotStarted,
   InProgress,
} 

返回:Not StartedIn Progress。我是怎么做到的谢谢(语言C#)

3 个答案:

答案 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

See example.

答案 2 :(得分:0)

Enum.GetName(typeof (Status), Status.InProgress));