如何在Enum上设置空间

我想在我的枚举上设置空间。 这是我的代码示例:

public enum category { goodBoy=1, BadBoy } 

我想设置

 public enum category { Good Boy=1, Bad Boy } 

当我检索时,我想从枚举中看到Good Boy的结果

您可以使用DataAnnotations修饰Enum值,因此以下情况属实:

 using System.ComponentModel.DataAnnotations; public enum Boys { [Display(Name="Good Body")] GoodBoy, [Display(Name="Bad Boy")] BadBoy } 

我不确定您为控件使用的UI框架,但是当您在Razor视图中键入HTML.LabelFor时,ASP.NET MVC可以读取DataAnnotations

这是一种扩展方法

如果您不使用Razor视图或者您想要在代码中获取名称:

 public class EnumExtention { public Dictionary ToDictionary(Enum myEnum) { var myEnumType = myEnum.GetType(); var names = myEnumType.GetFields() .Where(m => m.GetCustomAttribute() != null) .Select(e => e.GetCustomAttribute().Name); var values = Enum.GetValues(myEnumType).Cast(); return names.Zip(values, (n, v) => new KeyValuePair(v, n)) .ToDictionary(kv => kv.Key, kv => kv.Value); } } 

然后使用它:

 Boys.GoodBoy.ToDictionary() 

你误解了枚举的用途。 枚举用于编程目的,基本上给出一个数字的名称。 这是为了程序员在阅读源代码时的好处。

 status = StatusLevel.CRITICAL; // this is a lot easier to read... status = 5; // ...than this 

枚举用于显示目的,不应向最终用户显示。 与任何其他变量一样,枚举不能在名称中使用空格。

要将内部值与可以向用户显示的“漂亮”标签相关联,可以使用字典或散列。

 myDict["Bad Boy"] = "joe blow"; 

认为这可能已被涵盖,一些建议:

  • 如何为enum值设置枚举绑定combobox以及自定义字符串格式?
  • C#获取枚举值

只是不能击败stackoverflow;)现在这里只是太多了。

 using System.ComponentModel; 

然后…

 public enum category { [Description("Good Boy")] goodboy, [Description("Bad Boy")] badboy } 

解决了!!

这是不可能的,枚举器名称中不能包含空格。

你为什么不使用ToString()?

我的意思是当使用ToString()时,它给出了枚举值。 只需要添加一些标识符来捕获空间。例如:

 public enum category { good_Boy=1, Bad_Boy } 

当您在类别a = …等代码中获得枚举时,可以使用ToString()方法。 它为您提供值作为字符串。 之后,您只需将_更改为空字符串即可。

你不能在.Net中使用带空格的枚举。 当然,早期版本的VB和C ++可以实现这一点,但不再是这样。 我记得在VB6中我曾经把它们放在方括号中,但不是用C#。

由于最初的问题是要求在枚举值/名称中添加空格,我会说下划线字符应该用空格替换,而不是空字符串。 但是,最好的解决方案是使用注释的解决方案。

枚举器名称中不能包含空格。

我们知道enum是用于声明枚举的关键字。

你可以查看抛出此链接https://msdn.microsoft.com/en-us/library/sbbt4032.aspx

在上面提到的user14570(不错)解决方法上进行开发,这是一个完整的例子:

  public enum MyEnum { My_Word, Another_One_With_More_Words, One_More, We_Are_Done_At_Last } internal class Program { private static void Main(string[] args) { IEnumerable values = Enum.GetValues(typeof(MyEnum)).Cast(); List valuesWithSpaces = new List(values.Select(v => v.ToString().Replace("_", " "))); foreach (MyEnum enumElement in values) Console.WriteLine($"Name: {enumElement}, Value: {(int)enumElement}"); Console.WriteLine(); foreach (string stringRepresentation in valuesWithSpaces) Console.WriteLine(stringRepresentation); } } 

输出:

在此处输入图像描述

C#现在有一个内置函数来从枚举中获取描述。 这是它的工作原理

我的枚举:

 using System.ComponentModel.DataAnnotations; public enum Boys { [Description("Good Boy")] GoodBoy = 1, [Description("Bad Boy")] BadBoy = 2 } 

这是如何在代码中检索描述

 var enumValue = Boys.GoodBoy; string stringValue = enumValue.ToDescription(); 

结果是:好男孩。