我的枚举由以下值组成:
private enum PublishStatusses{
NotCompleted,
Completed,
Error
};
我希望能够以用户友好的方式输出这些值。 我不需要再从字符串到值。
我的枚举由以下值组成:
private enum PublishStatusses{
NotCompleted,
Completed,
Error
};
我希望能够以用户友好的方式输出这些值。 我不需要再从字符串到值。
当前回答
根据本文档:https://learn.microsoft.com/pt-br/dotnet/api/system.enum.tostring?view=netframework-4.8
可以使用如下格式将枚举数转换为字符串:
public enum Example
{
Example1,
Example2
}
Console.WriteLine(Example.Example1.ToString("g"));
//Outputs: "Example1"
你可以在这个链接中看到所有可能的格式:https://learn.microsoft.com/pt-br/dotnet/api/system.string?view=netframework-4.8
其他回答
只需要使用一个静态类来模拟枚举:
public static class PublishStatusses{
public const string NotCompleted = "Not Completed";
public const string Completed = "Completed";
public const string Error = "Error"
};
要访问这些值,只需要像枚举一样使用:
PublishStatusses.NotCompleted;
如果您只是想在单词之间添加空格,那么简单到
string res = Regex.Replace(PublishStatusses.NotCompleted, "[A-Z]", " $0").Trim();
最简单的方法是将这个扩展类包含到你的项目中,它将与项目中的任何枚举一起工作:
public static class EnumExtensions
{
public static string ToFriendlyString(this Enum code)
{
return Enum.GetName(code.GetType(), code);
}
}
用法:
enum ExampleEnum
{
Demo = 0,
Test = 1,
Live = 2
}
...
ExampleEnum ee = ExampleEnum.Live;
Console.WriteLine(ee.ToFriendlyString());
我已经迟到7年了:-)但我相信这个话题经常被访问。所以我想在咖啡里加一点糖:
那么“F”格式字符串说明符呢?
PublishStatusses[] ps = Enum.GetValues<PublishStatusses>();
ps.ToList().ForEach(c => Console.Write($"{c:F} "));
不需要任何显式的函数调用。
事实上,甚至不需要任何格式说明符。 在将变量赋值给字符串的情况下,ToString()执行以下工作:
string foo = PublishStatusses.Error.ToString(); // or ToString("F")
如果它要在CamelCase字符串的单词之间插入空格,你可以使用正则表达式:
Regex.Replace(foo, "(\\B[A-Z])", " $1")
你可以使用Humanizer包人性化枚举的可能性。一个eaxample:
enum PublishStatusses
{
[Description("Custom description")]
NotCompleted,
AlmostCompleted,
Error
};
然后你可以直接在enum上使用Humanize扩展方法:
var st1 = PublishStatusses.NotCompleted;
var str1 = st1.Humanize(); // will result in Custom description
var st2 = PublishStatusses.AlmostCompleted;
var str2 = st2.Humanize(); // will result in Almost completed (calculated automaticaly)