Why we can't have “char” enum types

匿名 (未验证) 提交于 2019-12-03 01:29:01

问题:

I want to know why we can't have "char" as underlying enum type. As we have byte,sbyte,int,uint,long,ulong,short,ushort as underlying enum type. Second what is the default underlying type of an enum?

回答1:

The default type is int. More information at the C# reference at MSDN. You can also find a link to the C# language specification at MSDN. I think the reason for the restriction probably derives from these statements in the language specification, section 4.1.5.

The char type is classified as an integral type, but it differs from the other integral types in two ways:



回答2:

I know this is an older question, but this information would have been helpful to me:

It appears that there is no problem using char as the value type for enums in C# .NET 4.0 (possibly even 3.5, but I haven't tested this). Here's what I've done, and it completely works:

public enum PayCode {     NotPaid = 'N',     Paid = 'P' } 

Convert Enum to char:

PayCode enumPC = PayCode.NotPaid; char charPC = (char)enumPC; // charPC == 'N' 

Convert char to Enum:

char charPC = 'P'; if (Enum.IsDefined(typeof(PayCode), (int)charPC)) { // check if charPC is a valid value     PayCode enumPC = (PayCode)charPC; // enumPC == PayCode.Paid } 

Works like a charm, just as you would expect from the char type!



回答3:

This is workaround I'm using

enum MyEnum {     AA = 'A',     BB = 'B',     CC = 'C' };  static void Main(string[] args) {     MyEnum e = MyEnum.AA;     char value = (char)e.GetHashCode(); //value = 'A' } 


回答4:

Technically, you can't do this. But, you can convert the enum to a byte and then convert that to char. This is useful if your goal is to have something like this (realizing this is impossible to do:

public enum CharEnum {     one = '1' } 

You can do this, however, by using ASCII byte values and then converting:

public enum CharEnum {     one = 49,     two = 50 } 

You can then convert to byte and to char to get the char value. It is not really pretty, but it will work, if getting a char is your ultimate goal. You can also use unicode and an int value, if you need chars outside of the ASCII range. :-)



回答5:

char charPC = 'P'; if (Enum.IsDefined(typeof(PayCode), (PayCode)charPC)) {          // check if charPC is a valid value         PayCode enumPC = (PayCode)charPC; // enumPC == PayCode.Paid } 
  • Made a small change, no need to convert it to an (int) in the if for all cases, depends on the enum type. But if you cast it directly to the enum type itself, it should always work.


回答6:

Pretty much everything has been said already about that. Just wanted to say you can use extensions if you use a lot of "char enums":

public enum MyEnum {     MY_VALUE = 'm' }  public static class MyExtensions {     public static char GetChar(this Enum value)     {         return (char)value.GetHashCode();     } }  class Program {     public static void Main(string[] args)     {         MyEnum me = MyEnum.MY_VALUE;         Console.WriteLine(me + " = " + me.GetChar());     } } 


回答7:

Character enums would simply be strings wouldn't they? I'm not sure what other benefit you would derive from a character enumeration?

As others have said, the default type is int for an enumeration.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!