Como Obter Valor Intensivo do Enum em C#

Payel Ganguly 10 agosto 2021 1 novembro 2020
  1. Tipo Fundido para converter enum em int
  2. classe static para converter o enum para int
  3. Utilize GetTypeCode() para converter enum para int
  4. Mais exemplos
Como Obter Valor Intensivo do Enum em C#

Este tutorial explica como obter o valor int do enum em C# e lista alguns exemplos de códigos comuns para obter uma visão geral do tipo de enumeração em C#.

O Enum (também conhecido como Enumeração) é um tipo de dado definido pelo usuário ou um tipo de valor que normalmente define um array de valores constantes do tipo integral subjacente. A palavra-chave enum define um tipo de enumeração dentro do código. O exemplo básico é dado abaixo:

enum Name
{
    Joe,
    Rick,
    John,
    Matt
}

O tipo de enumeração dos valores constantes pré-definidos é do tipo de dado int por padrão. Entretanto, o tipo integral subjacente pode ser explicitamente definido para qualquer outro tipo numérico integral como sbyte, byte, short, ushort, int, uint, long e ulong. A tabela abaixo descreve o tamanho e o alcance de cada tipo integral predefinido em C#.

C# palavra-chave Tamanho inteiro Gama
sbyte assinado em 8 bits [-128, 127]
byte 8-bit sem assinatura [0, 255]
short assinado em 16 bits [-32,768, 32,767]
ushort não assinado 16 bits [0, 65,535]
int assinado 32-bit [-2,147,483,648, 2,147,483,647]
uint 32-bit sem assinatura [0, 4,294,967,295]
long assinado 64-bits [-9,223,372,036,854,775,808, 9,223,372,036,854,775,807]
ulong não assinado 64-bits [0, 18,446,744,073,709,551,615]

Tipo Fundido para converter enum em int

Obter o valor de int do enum não é tão genérico como parece ser, pois o desafio está dentro dos tipos de dados. Veja o exemplo a seguir.

public enum Days
{
    Numbers = 20,
    DayType = 3
}
int abc = (int)Days.Numbers;
Console.WriteLine(abc);

Resultado:

20

Pode haver diferentes tipos subjacentes para o enum que pode ser um pouco complicado para os programadores. O código acima armazena o valor int de Days de enum a abc. Neste caso, o método Typecasting é utilizado para alterar o tipo de dados de uma entidade para outro tipo de dados, garantindo o uso correto das variáveis. Mas nem sempre é preferível utilizar o Typecasting.

Há maneiras que não dependem do Typecasting e podem ser bastante simples. Estas maneiras são explicadas em detalhes com exemplos de código abaixo.

classe static para converter o enum para int

using System;

class Demo
{
    public static class Subjects
    {
        public const int maths= 2;
        public const int science= 3;
        public const int english= 4;
        public const int history= 5;
    }
    public static void Main()
    {
        int xyz = Subjects.science;
        Console.WriteLine(xyz);
    }
}

Resultado:

3

O código acima mostra que Subjects.science obtém o valor correto de 3 sem pensar em digitar o valor inteiro correto.

Utilize GetTypeCode() para converter enum para int

using System;

class Demo
{
    public enum Subjects
    {
        maths, science, english, history
    }
    public static void Main()
    {
        Subjects Maths = Subjects.maths;
        Object sub = Convert.GetTypeCode(Maths);
        Console.WriteLine(sub);
    }
}

Resultado:

Int32

Se qualquer programador não quiser utilizar static const, então pode utilizar o método acima de GetTypeCode(). Todo o código acima extrai com sucesso o número inteiro do tipo enum. Os exemplos abaixo ajudarão a obter mais idéias.

Mais exemplos

Exemplo 1:

using System;

class Demo
{
    public enum Positions
    {
        Role = 2,
        Project = 3,
        Jobs = 4
    }
  	public static void Main()
    {
        int a = (int)Positions.Jobs;
        Console.WriteLine(a);
    }
}

Resultado:

4

Exemplo 2:

using System;

class Demo
{
    public enum Galaxy:long
    {Sun = 1, S5HVS1 = 2, HD140283 = 2147977653};
  
    public static void Main()
    {
        long solar = (long)Galaxy.HD140283;
        Console.WriteLine(solar);
    }
}

Resultado:

2147977653

Artigo relacionado - Csharp Integer

Artigo relacionado - Csharp Enum