Enum.GetValues(Type) 方法

定义

检索指定枚举中常数值的数组。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

参数

enumType
Type

枚举类型。An enumeration type.

返回

一个数组,其中包含 enumType 中常数的值。An array that contains the values of the constants in enumType.

属性

异常

enumTypenullenumType is null.

enumType 不是 EnumenumType is not an Enum.

在仅限反射的上下文中通过反射调用方法,The method is invoked by reflection in a reflection-only context, -or- enumType 是在仅限反射的上下文中加载的程序集中的类型。enumType is a type from an assembly loaded in a reflection-only context.

示例

下面的示例演示如何使用 GetValuesThe 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

注解

数组的元素按枚举常量的二进制值(即,其无符号的量)进行排序。The elements of the array are sorted by the binary values of the enumeration constants (that is, by their unsigned magnitude). 下面的示例显示有关枚举的 GetValues 方法返回的数组的信息,该数组包含负值、零和正值。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

GetValues 方法返回数组,该数组包含 enumType 枚举的每个成员的值。The GetValues method returns an array that contains a value for each member of the enumType enumeration. 如果多个成员具有相同的值,则返回的数组包含重复值。If multiple members have the same value, the returned array includes duplicate values. 在这种情况下,对返回的数组中的每个值调用 GetName 方法不会还原分配给具有重复值的成员的唯一名称。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. 若要成功检索枚举成员的所有名称,请调用 GetNames 方法。To retrieve all the names of enumeration members successfully, call the GetNames method.

不能在仅反射上下文中使用反射来调用 GetValues 方法。The GetValues method cannot be invoked by using reflection in a reflection-only context. 相反,您可以使用 Type.GetFields 方法检索所有枚举成员的值,以获取表示枚举成员的 FieldInfo 对象的数组,然后对数组的每个元素调用 FieldInfo.GetRawConstantValue 方法。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. 下面的示例演示了此方法。The following example illustrates this technique. 它需要在名为 "enumeration" 的程序集中定义以下枚举: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   

程序集加载到仅反射上下文中,表示实例化 Pets 枚举的 Type 对象将被实例化,检索 FieldInfo 对象的数组,并向控制台显示字段值。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

适用于