如何在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();
结果是:好男孩。