Tipos de enumeraçãoC# (referência)Enumeration types (C# reference)

Um tipo de enumeração (ou tipode enumeração) é um tipo de valor definido por um conjunto de constantes nomeadas do tipo numérico integral subjacente.An enumeration type (or enum type) is a value type defined by a set of named constants of the underlying integral numeric type. Para definir um tipo de enumeração, use a palavra-chave enum e especifique os nomes dos membros de enumeração:To define an enumeration type, use the enum keyword and specify the names of enum members:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

Por padrão, os valores constantes associados de membros de enumeração são do tipo int; Eles começam com zero e aumentam em um seguindo a ordem de texto de definição.By default, the associated constant values of enum members are of type int; they start with zero and increase by one following the definition text order. Você pode especificar explicitamente qualquer outro tipo numérico integral como um tipo subjacente de um tipo de enumeração.You can explicitly specify any other integral numeric type as an underlying type of an enumeration type. Você também pode especificar explicitamente os valores constantes associados, como mostra o exemplo a seguir:You also can explicitly specify the associated constant values, as the following example shows:

enum ErrorCode : ushort
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}

Você não pode definir um método dentro da definição de um tipo de enumeração.You cannot define a method inside the definition of an enumeration type. Para adicionar funcionalidade a um tipo de enumeração, crie um método de extensão.To add functionality to an enumeration type, create an extension method.

O valor padrão de um tipo de enumeração E é o valor produzido pelo Expression (E)0, mesmo se zero não tiver o membro enum correspondente.The default value of an enumeration type E is the value produced by expression (E)0, even if zero doesn't have the corresponding enum member.

Você usa um tipo de enumeração para representar uma escolha de um conjunto de valores mutuamente exclusivos ou uma combinação de opções.You use an enumeration type to represent a choice from a set of mutually exclusive values or a combination of choices. Para representar uma combinação de opções, defina um tipo de enumeração como sinalizadores de bits.To represent a combination of choices, define an enumeration type as bit flags.

Tipos de Enumeração como Sinalizadores de BitEnumeration types as bit flags

Se você quiser que um tipo de enumeração represente uma combinação de opções, defina membros de enum para essas opções, de modo que uma opção individual seja um campo de bits.If you want an enumeration type to represent a combination of choices, define enum members for those choices such that an individual choice is a bit field. Ou seja, os valores associados desses membros de enumeração devem ser as potências de dois.That is, the associated values of those enum members should be the powers of two. Em seguida, você pode usar os operadores lógicos de bits bit a | ou & para combinar opções ou combinações de interseção de opções, respectivamente.Then, you can use the bitwise logical operators | or & to combine choices or intersect combinations of choices, respectively. Para indicar que um tipo de enumeração declara campos de bits, aplique o atributo flags a ele.To indicate that an enumeration type declares bit fields, apply the Flags attribute to it. Como mostra o exemplo a seguir, você também pode incluir algumas combinações típicas na definição de um tipo de enumeração.As the following example shows, you also can include some typical combinations in the definition of an enumeration type.

[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

public class FlagsEnumExample
{
    public static void Main()
    {
        Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
        Console.WriteLine(meetingDays);
        // Output:
        // Monday, Wednesday, Friday

        Days workingFromHomeDays = Days.Thursday | Days.Friday;
        Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
        // Output:
        // Join a meeting by phone on Friday

        bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
        Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
        // Output:
        // Is there a meeting on Tuesday: False

        var a = (Days)37;
        Console.WriteLine(a);
        // Output:
        // Monday, Wednesday, Saturday
    }
}

Para obter mais informações e exemplos, consulte a página de referência da API System.FlagsAttribute e os Membros não exclusivos e a seção de atributo flags da página de referência da API System.Enum.For more information and examples, see the System.FlagsAttribute API reference page and the Non-exclusive members and the Flags attribute section of the System.Enum API reference page.

O tipo System. Enum e a restrição enumThe System.Enum type and enum constraint

O tipo de System.Enum é a classe base abstrata de todos os tipos de enumeração.The System.Enum type is the abstract base class of all enumeration types. Ele fornece vários métodos para obter informações sobre um tipo de enumeração e seus valores.It provides a number of methods to get information about an enumeration type and its values. Para obter mais informações e exemplos, consulte a página de referência da API System.Enum.For more information and examples, see the System.Enum API reference page.

A partir C# do 7,3, você pode usar System.Enum em uma restrição de classe base (que é conhecida como restrição de enumeração) para especificar que um parâmetro de tipo é um tipo de enumeração.Beginning with C# 7.3, you can use System.Enum in a base class constraint (that is known as the enum constraint) to specify that a type parameter is an enumeration type.

ConversõesConversions

Para qualquer tipo de enumeração, existem conversões explícitas entre o tipo de enumeração e seu tipo integral subjacente.For any enumeration type, there exist explicit conversions between the enumeration type and its underlying integral type. Se você converter um valor de enumeração para seu tipo subjacente, o resultado será o valor integral associado de um membro de enumeração.If you cast an enum value to its underlying type, the result is the associated integral value of an enum member.

public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

public class EnumConversionExample
{
    public static void Main()
    {
        Season a = Season.Autumn;
        Console.WriteLine($"Integral value of {a} is {(int)a}");  // output: Integral value of Autumn is 2

        var b = (Season)1;
        Console.WriteLine(b);  // output: Summer

        var c = (Season)4;
        Console.WriteLine(c);  // output: 4
    }
}

Use o método Enum.IsDefined para determinar se um tipo de enumeração contém um membro enum com determinado valor associado.Use the Enum.IsDefined method to determine whether an enumeration type contains an enum member with the certain associated value.

Para qualquer tipo de enumeração, existem conversões boxing e unboxing de e para o tipo System.Enum, respectivamente.For any enumeration type, there exist boxing and unboxing conversions to and from the System.Enum type, respectively.

especificação da linguagem C#C# language specification

Para obter mais informações, confira as seguintes seções da especificação da linguagem C#:For more information, see the following sections of the C# language specification:

Confira tambémSee also