|
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
|
Tradução
Original
|
Classe Enum
Assembly: mscorlib (em mscorlib.dll)
O tipo Enum expõe os membros a seguir.
| Nome | Descrição | |
|---|---|---|
![]() ![]() | CompareTo | |
![]() ![]() | Equals | |
![]() ![]() | Finalize | |
![]() ![]() | Format | |
![]() ![]() | GetHashCode | |
![]() ![]() | GetName | |
![]() ![]() | GetNames | |
![]() ![]() | GetType | |
![]() ![]() | GetTypeCode | |
![]() ![]() ![]() | GetUnderlyingType | |
![]() ![]() | GetValues | |
![]() | HasFlag | |
![]() ![]() ![]() | IsDefined | |
![]() ![]() | MemberwiseClone | |
![]() ![]() | Parse(Type, String) | |
![]() ![]() ![]() | Parse(Type, String, Boolean) | |
![]() ![]() | ToObject(Type, Byte) | |
![]() ![]() | ToObject(Type, Int16) | |
![]() ![]() | ToObject(Type, Int32) | |
![]() ![]() | ToObject(Type, Int64) | |
![]() ![]() ![]() | ToObject(Type, Object) | |
![]() ![]() | ToObject(Type, SByte) | |
![]() ![]() | ToObject(Type, UInt16) | |
![]() ![]() | ToObject(Type, UInt32) | |
![]() ![]() | ToObject(Type, UInt64) | |
![]() ![]() | ToString() | |
![]() ![]() | ToString(IFormatProvider) | Obsoleta. |
![]() ![]() | ToString(String) | |
![]() ![]() | ToString(String, IFormatProvider) | Obsoleta. |
![]() ![]() | TryParse<TEnum>(String, TEnum) | |
![]() ![]() | TryParse<TEnum>(String, Boolean, TEnum) |
| Nome | Descrição | |
|---|---|---|
![]() ![]() ![]() | IConvertible.ToBoolean | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToByte | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToChar | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToDateTime | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToDecimal | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToDouble | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToInt16 | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToInt32 | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToInt64 | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToSByte | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToSingle | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToType | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToUInt16 | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToUInt32 | Infraestrutura. |
![]() ![]() ![]() | IConvertible.ToUInt64 | Infraestrutura. |
Criação de um tipo de enumeração
Cuidado |
|---|
Criar uma instância de um tipo de enumeração
Usando os recursos da linguagem de programação específica para difusão (como C#) ou converter um valor inteiro (como em Visual Basic) para um valor de enumeração. O exemplo a seguir cria um ArrivalStatus objeto cujo valor é ArrivalStatus.Early na forma. Chamando seu construtor padrão implícitos. Como mostra o exemplo a seguir, neste caso o valor subjacente da instância de enumeração é 0. No entanto, isso não é necessariamente o valor de uma constante válido na enumeração. Chamando o Parse ou TryParse método para analisar uma cadeia de caracteres que contém o nome de uma constante da enumeração. Para obter mais informações, consulte o De análise de valores de enumeração seção. Chamando o ToObject método para converter um valor inteiro para um tipo de enumeração. Para obter mais informações, consulte o Realizar conversões seção.
As práticas recomendadas de enumeração
Se você não tiver definido um membro de enumeração cujo valor é 0, considere a criação de um None enumerados constante. Por padrão, a memória usada para a enumeração é inicializada para zero, o common language runtime. Conseqüentemente, se você não definir uma constante cujo valor é zero, a enumeração conterá um valor ilegal quando ele é criado. Se há um caso padrão óbvio que o seu aplicativo deve representar, considere usar um enumerados constante cujo valor é zero para representá-lo. Se não houver nenhum caso padrão, considere o uso de uma constante enumerada cujo valor é zero para especificar o caso em que não esteja representado por qualquer uma das constantes enumeradas. Não especifica constantes enumeradas que são reservados para uso futuro. Quando você define um método ou propriedade que leva a uma constante enumerada como um valor, considere a possibilidade de validar o valor. O motivo é que você pode converter um valor numérico para o tipo de enumeração, mesmo se esse valor numérico não está definido na enumeração.
Executar operações com enumerações
Realização de conversões
using System; public enum ArrivalStatus { Unknown=-3, Late=-1, OnTime=0, Early=1 }; public class Example { public static void Main() { int[] values = { -3, -1, 0, 1, 5, Int32.MaxValue }; foreach (var value in values) { ArrivalStatus status; if (Enum.IsDefined(typeof(ArrivalStatus), value)) status = (ArrivalStatus) value; else status = ArrivalStatus.Unknown; Console.WriteLine("Converted {0:N0} to {1}", value, status); } } } // The example displays the following output: // Converted -3 to Unknown // Converted -1 to Late // Converted 0 to OnTime // Converted 1 to Early // Converted 5 to Unknown // Converted 2,147,483,647 to Unknown
A análise de valores de enumeração
string number = "-1"; string name = "Early"; try { ArrivalStatus status1 = (ArrivalStatus) Enum.Parse(typeof(ArrivalStatus), number); if (!(Enum.IsDefined(typeof(ArrivalStatus), status1))) status1 = ArrivalStatus.Unknown; Console.WriteLine("Converted '{0}' to {1}", number, status1); } catch (FormatException) { Console.WriteLine("Unable to convert '{0}' to an ArrivalStatus value.", number); } ArrivalStatus status2; if (Enum.TryParse<ArrivalStatus>(name, out status2)) { if (!(Enum.IsDefined(typeof(ArrivalStatus), status2))) status2 = ArrivalStatus.Unknown; Console.WriteLine("Converted '{0}' to {1}", name, status2); } else { Console.WriteLine("Unable to convert '{0}' to an ArrivalStatus value.", number); } // The example displays the following output: // Converted '-1' to Late // Converted 'Early' to Early
Valores de enumeração de formatação
Os membros de enumeração de iteração
Você pode chamar o GetNames método para recuperar uma matriz de cadeia de caracteres que contém os nomes dos membros de enumeração. Em seguida, para cada elemento da matriz de cadeia de caracteres, você pode chamar o Parse método para converter a seqüência de caracteres para o valor de enumeração equivalente. O exemplo a seguir ilustra essa abordagem. string[] names = Enum.GetNames(typeof(ArrivalStatus)); Console.WriteLine("Members of {0}:", typeof(ArrivalStatus).Name); Array.Sort(names); foreach (var name in names) { ArrivalStatus status = (ArrivalStatus) Enum.Parse(typeof(ArrivalStatus), name); Console.WriteLine(" {0} ({0:D})", status); } // The example displays the following output: // Members of ArrivalStatus: // Early (1) // Late (-1) // OnTime (0) // Unknown (-3)
Você pode chamar o GetValues método para recuperar uma matriz que contém os valores subjacentes da enumeração. Em seguida, para cada elemento da matriz, você pode chamar o ToObject método para converter o inteiro para o valor de enumeração equivalente. O exemplo a seguir ilustra essa abordagem. var values = Enum.GetValues(typeof(ArrivalStatus)); Console.WriteLine("Members of {0}:", typeof(ArrivalStatus).Name); foreach (var value in values) { ArrivalStatus status = (ArrivalStatus) Enum.ToObject(typeof(ArrivalStatus), value); Console.WriteLine(" {0} ({0:D})", status); } // The example displays the following output: // Members of ArrivalStatus: // OnTime (0) // Early (1) // Unknown (-3) // Late (-1)
Os membros não-exclusiva e o atributo de sinalizadores
Use o FlagsAttribute atributo personalizado para uma enumeração somente se uma operação bit a bit (AND, OR ou exclusivo) é para ser executada em um valor numérico. Defina constantes de enumeração em potências de dois, ou seja, 1, 2, 4, 8 e assim por diante. Isso significa que os sinalizadores individuais em constantes de enumeração combinados não se sobreponham. Considere a criação de uma constante enumerada para combinações de sinalizador comumente usados. Por exemplo, se você tiver uma enumeração usada para operações de e/S de arquivo que contém as constantes enumeradas Read = 1 e Write = 2, considere a possibilidade de criar a constante enumerada ReadWrite = Read OR Write, que combina o Read e Write sinalizadores. Além disso, a operação OR bit a bit usada para combinar os sinalizadores pode ser considerada um conceito avançado em algumas circunstâncias que não deve ser exigida para tarefas simples. Tenha cuidado se você definir um número negativo como uma constante enumerada de sinalizador porque muitos posições de sinalizador podem ser definidas como 1, que pode tornar seu código confuso e incentivar a erros de codificação. Uma maneira conveniente de testar se um sinalizador é definido em um valor numérico é chamar a instância HasFlag método, conforme mostrado no exemplo a seguir. Ele equivale a executar uma operação a bit entre o valor numérico e a constante enumerada de sinalizador, que define todos os bits no valor numérico em zero que não correspondem ao sinalizador, e em seguida, teste se o resultado dessa operação é igual a constante enumerada de sinalizador. Isso é ilustrado no exemplo a seguir. Use None como o nome da constante enumerada sinalizador cujo valor é zero. Não é possível usar o None uma constante enumerada em uma operação a bit para testar um sinalizador porque o resultado é sempre zero. No entanto, você pode executar uma lógica, não uma comparação bit a bit, entre o valor numérico e a None uma constante enumerada para determinar se qualquer bits no valor numérico definido. Isso é ilustrado no exemplo a seguir. Não defina um valor de enumeração exclusivamente para espelhar o estado da própria enumeração. Por exemplo, não defina uma constante enumerada que simplesmente marca o final da enumeração. Se você precisa determinar o último valor da enumeração, verificar esse valor explicitamente. Além disso, você pode executar uma verificação de intervalo para a constante enumerada primeiro e último se todos os valores no intervalo são válidos.
using System; public class EnumTest { enum Days { Saturday, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday }; enum BoilingPoints { Celsius = 100, Fahrenheit = 212 }; [FlagsAttribute] enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 }; public static void Main() { Type weekdays = typeof(Days); Type boiling = typeof(BoilingPoints); Console.WriteLine("The days of the week, and their corresponding values in the Days Enum are:"); foreach ( string s in Enum.GetNames(weekdays) ) Console.WriteLine( "{0,-11}= {1}", s, Enum.Format( weekdays, Enum.Parse(weekdays, s), "d")); Console.WriteLine(); Console.WriteLine("Enums can also be created which have values that represent some meaningful amount."); Console.WriteLine("The BoilingPoints Enum defines the following items, and corresponding values:"); foreach ( string s in Enum.GetNames(boiling) ) Console.WriteLine( "{0,-11}= {1}", s, Enum.Format(boiling, Enum.Parse(boiling, s), "d")); Colors myColors = Colors.Red | Colors.Blue | Colors.Yellow; Console.WriteLine(); Console.WriteLine("myColors holds a combination of colors. Namely: {0}", myColors); } }
Windows 7, Windows Vista SP1 ou posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core não compatível), Windows Server 2008 R2 (Server Core não compatível com SP1 ou posterior), Windows Server 2003 SP2
O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos de sistema do .NET Framework.
