Enum.GetValues(Type) Método

Definição

Recupera uma matriz de valores de constantes em uma enumeração especificada.Retrieves an array of the values of the constants in a specified enumeration.

public:
 static Array ^ GetValues(Type ^ enumType);
[System.Runtime.InteropServices.ComVisible(true)]
public static Array GetValues (Type enumType);
static member GetValues : Type -> Array
Public Shared Function GetValues (enumType As Type) As Array

Parâmetros

enumType
Type

Um tipo de enumeração.An enumeration type.

Retornos

Uma matriz que contém os valores das constantes em enumType.An array that contains the values of the constants in enumType.

Atributos

Exceções

enumType é null.enumType is null.

enumType não é um Enum.enumType is not an Enum.

O método é invocado por reflexão em um contexto de somente reflexão,The method is invoked by reflection in a reflection-only context, - ou --or- enumType é um tipo de um assembly carregado em um contexto de somente reflexão.enumType is a type from an assembly loaded in a reflection-only context.

Exemplos

O exemplo a seguir ilustra o uso de GetValues.The following example illustrates the use of GetValues.

using namespace System;
enum class Colors
{
   Red, Green, Blue, Yellow
};

enum class Styles
{
   Plaid = 0,
   Striped = 23,
   Tartan = 65,
   Corduroy = 78
};

int main()
{
   Console::WriteLine(  "The values of the Colors Enum are:" );
   Array^ a = Enum::GetValues( Colors::typeid );
   for ( Int32 i = 0; i < a->Length; i++ )
   {
      Object^ o = a->GetValue( i );
      Console::WriteLine(  "{0}", Enum::Format( Colors::typeid, o,  "D" ) );
   }
   Console::WriteLine();
   Console::WriteLine(  "The values of the Styles Enum are:" );
   Array^ b = Enum::GetValues( Styles::typeid );
   for ( Int32 i = 0; i < b->Length; i++ )
   {
      Object^ o = b->GetValue( i );
      Console::WriteLine(  "{0}", Enum::Format( Styles::typeid, o,  "D" ) );

   }
}
// The example produces the following output:
//       The values of the Colors Enum are:
//       0
//       1
//       2
//       3
//       
//       The values of the Styles Enum are:
//       0
//       23
//       65
//       78
using System;

public class GetValuesTest {
    enum Colors { Red, Green, Blue, Yellow };
    enum Styles { Plaid = 0, Striped = 23, Tartan = 65, Corduroy = 78 };

    public static void Main() {

        Console.WriteLine("The values of the Colors Enum are:");
        foreach(int i in Enum.GetValues(typeof(Colors)))
            Console.WriteLine(i);

        Console.WriteLine();

        Console.WriteLine("The values of the Styles Enum are:");
        foreach(int i in Enum.GetValues(typeof(Styles)))
            Console.WriteLine(i);
    }
}
// The example produces the following output:
//       The values of the Colors Enum are:
//       0
//       1
//       2
//       3
//       
//       The values of the Styles Enum are:
//       0
//       23
//       65
//       78
Public Class GetValuesTest
   
    Enum Colors
        Red
        Green
        Blue
        Yellow
    End Enum 'Colors
    
    Enum Styles
        Plaid = 0
        Striped = 23
        Tartan = 65
        Corduroy = 78
    End Enum 'Styles
    
    Public Shared Sub Main()
        
        Console.WriteLine("The values of the Colors Enum are:")
        Dim i As Integer
        For Each i In  [Enum].GetValues(GetType(Colors))
            Console.WriteLine(i)
        Next

        Console.WriteLine()
        
        Console.WriteLine("The values of the Styles Enum are:")
        For Each i In  [Enum].GetValues(GetType(Styles))
            Console.WriteLine(i)
        Next
    End Sub 
End Class 
' The example produces the following output:
'       The values of the Colors Enum are:
'       0
'       1
'       2
'       3
'       
'       The values of the Styles Enum are:
'       0
'       23
'       65
'       78

Comentários

Os elementos da matriz são classificados pelos valores binários das constantes de enumeração (ou seja, por sua magnitude não assinada).The elements of the array are sorted by the binary values of the enumeration constants (that is, by their unsigned magnitude). O exemplo a seguir exibe informações sobre a matriz retornada pelo método GetValues para uma enumeração que inclui um valor negativo, zero e um valor positivo.The following example displays information about the array returned by the GetValues method for an enumeration that includes a negative value, zero, and a positive value.

using System;

enum SignMagnitude { Negative = -1, Zero = 0, Positive = 1 };
 
public class Example
{
   public static void Main()
   {
      foreach (var value in Enum.GetValues(typeof(SignMagnitude))) {
         Console.WriteLine("{0,3}     0x{0:X8}     {1}",
                           (int) value, ((SignMagnitude) value));
}   }
}
// The example displays the following output:
//         0     0x00000000     Zero
//         1     0x00000001     Positive
//        -1     0xFFFFFFFF     Negative
Public Enum SignMagnitude As Integer
   Negative = -1 
   Zero = 0
   Positive = 1
End Enum
   
Module Example
   Public Sub Main()
      Dim values() As Integer = CType([Enum].GetValues(GetType(SignMagnitude)), Integer())
      For Each value In values
         Console.WriteLine("{0,3}     0x{0:X8}     {1}",
                           value, CType(value, SignMagnitude).ToString())
      Next
   End Sub
End Module
' The example displays the following output:
'      0     0x00000000     Zero
'      1     0x00000001     Positive
'     -1     0xFFFFFFFF     Negative

O método GetValues retorna uma matriz que contém um valor para cada membro da enumeração enumType.The GetValues method returns an array that contains a value for each member of the enumType enumeration. Se vários membros tiverem o mesmo valor, a matriz retornada incluirá valores duplicados.If multiple members have the same value, the returned array includes duplicate values. Nesse caso, chamar o método GetName com cada valor na matriz retornada não restaura os nomes exclusivos atribuídos aos membros que têm valores duplicados.In this case, calling the GetName method with each value in the returned array does not restore the unique names assigned to members that have duplicate values. Para recuperar todos os nomes dos membros de enumeração com êxito, chame o método GetNames.To retrieve all the names of enumeration members successfully, call the GetNames method.

O método GetValues não pode ser invocado usando reflexão em um contexto somente de reflexão.The GetValues method cannot be invoked by using reflection in a reflection-only context. Em vez disso, você pode recuperar o valor de todos os membros de enumeração usando o método Type.GetFields para obter uma matriz de objetos FieldInfo que representam membros de enumeração e, em seguida, chamar o método FieldInfo.GetRawConstantValue em cada elemento da matriz.Instead, you can retrieve the value of all enumeration members by using the Type.GetFields method to get an array of FieldInfo objects that represent enumeration members and then call the FieldInfo.GetRawConstantValue method on each element of the array. O exemplo a seguir ilustra essa técnica.The following example illustrates this technique. Ele requer que você defina a seguinte enumeração em um assembly denominado enumerações. dll:It requires that you define the following enumeration in an assembly named Enumerations.dll:

[Flags] enum Pets { None=0, Dog=1, Cat=2, Rodent=4, Bird=8, 
                    Fish=16, Reptile=32, Other=64 };
<Flags> Public Enum Pets As Integer
   None = 0
   Dog = 1
   Cat = 2
   Rodent = 4
   Bird = 8
   Fish = 16
   Reptile = 32
   Other = 64
End Enum   

O assembly é carregado em um contexto somente de reflexão, um objeto Type que representa a enumeração Pets é instanciado, uma matriz de objetos FieldInfo é recuperada e os valores de campo são exibidos para o console.The assembly is loaded in a reflection-only context, a Type object that represents the Pets enumeration is instantiated, an array of FieldInfo objects is retrieved, and the field values are displayed to the console.

using System;
using System.Reflection;

public class Example
{
   public static void Main()
   {
      Assembly assem = Assembly.ReflectionOnlyLoadFrom(@".\Enumerations.dll");
      Type typ = assem.GetType("Pets");
      FieldInfo[] fields = typ.GetFields();

      foreach (var field in fields) {
         if (field.Name.Equals("value__")) continue;
          
         Console.WriteLine("{0,-9} {1}", field.Name + ":", 
                                         field.GetRawConstantValue());
      }
   }
}
// The example displays the following output:
//       None:     0
//       Dog:      1
//       Cat:      2
//       Rodent:   4
//       Bird:     8
//       Fish:     16
//       Reptile:  32
//       Other:    64
Imports System.Reflection

Module Example
   Public Sub Main()
      Dim assem As Assembly = Assembly.ReflectionOnlyLoadFrom(".\Enumerations.dll")
      Dim typ As Type = assem.GetType("Pets")
      Dim fields As FieldInfo() = typ.GetFields

      For Each field In fields
         If field.Name.Equals("value__") Then Continue For
          
         Console.WriteLine("{0,-9} {1}", field.Name + ":", 
                                         field.GetRawConstantValue())
      Next
   End Sub
End Module
' The example displays the following output:
'       None:     0
'       Dog:      1
'       Cat:      2
'       Rodent:   4
'       Bird:     8
'       Fish:     16
'       Reptile:  32
'       Other:    64

Aplica-se a