c# - Perché non possiamo avere tipi di enumerazione "char"



3 Answers

So che questa è una domanda più vecchia, ma questa informazione mi sarebbe stata utile:

Sembra che non ci siano problemi nell'utilizzare char come tipo di valore per enum in C # .NET 4.0 (forse anche 3.5, ma non l'ho provato). Ecco cosa ho fatto e funziona completamente:

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

Converti Enum in char:

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

Converti char in 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
}

Funziona come un incantesimo, proprio come ti aspetteresti dal tipo char!

c# enums char

Voglio sapere perché non possiamo avere "char" come tipo di enum sottostante. Come abbiamo byte, sbyte, int, uint, long, ulong, short, ushort come tipo enum sottostante. Secondo quale è il tipo di base predefinito di un enum?




Tecnicamente, non puoi farlo. Ma puoi convertire l'enum in un byte e poi convertirlo in char. Questo è utile se il tuo obiettivo è avere qualcosa di simile (rendendosi conto che è impossibile farlo:

public enum CharEnum
{
    one = '1'
}

È possibile farlo, tuttavia, utilizzando i valori di byte ASCII e quindi la conversione:

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

È quindi possibile convertire in byte e in char per ottenere il valore char. Non è molto bello, ma funzionerà, se ottenere un char è il tuo obiettivo finale. Puoi anche usare unicode e un valore int, se hai bisogno di caratteri al di fuori dell'intervallo ASCII. :-)




Praticamente tutto è già stato detto a riguardo. Volevo solo dire che puoi usare le estensioni se usi un sacco di "enanti":

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());
    }
}





Related


Tags

c#   enums   char