Прочитать на английском

Поделиться через


Enum.GetValues Метод

Определение

Перегрузки

GetValues(Type)

Возвращает массив значений констант в указанном перечислении.

GetValues<TEnum>()

Возвращает массив значений констант в указанном типе перечисления.

GetValues(Type)

Исходный код:
Enum.cs
Исходный код:
Enum.cs
Исходный код:
Enum.cs

Возвращает массив значений констант в указанном перечислении.

C#
public static Array GetValues(Type enumType);
C#
[System.Runtime.InteropServices.ComVisible(true)]
public static Array GetValues(Type enumType);

Параметры

enumType
Type

Тип перечисления.

Возвращаемое значение

Массив, который содержит значения констант в enumType.

Атрибуты

Исключения

enumType имеет значение null.

Значение параметра enumType не является объектом Enum.

Метод вызывается отражением в контексте, предназначенном только для отражения.

-или-

enumType является типом из сборки, загруженной в контекст только для отражения.

.NET 8 и более поздних версий: enumType является логическим типом перечисления.

Примеры

В следующем примере демонстрируется применение GetValues.

C#
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

Комментарии

Элементы массива сортируются по двоичным значениям констант перечисления (то есть по их величине без знака). В следующем примере отображаются сведения о массиве, возвращаемом методом GetValues для перечисления, включающего отрицательное значение, ноль и положительное значение.

C#
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

Метод GetValues возвращает массив, содержащий значение для каждого члена перечисления enumType . Если несколько элементов имеют одно и то же значение, возвращаемый массив содержит повторяющиеся значения. В этом случае вызов GetName метода с каждым значением в возвращаемом массиве не восстанавливает уникальные имена, назначенные членам с повторяющимися значениями. Чтобы успешно получить все имена членов перечисления, вызовите GetNames метод .

Метод GetValues не может вызываться с помощью отражения в контексте только для отражения. Вместо этого можно получить значение всех элементов перечисления с помощью Type.GetFields метода , чтобы получить массив FieldInfo объектов, представляющих элементы перечисления, а затем вызвать FieldInfo.GetRawConstantValue метод для каждого элемента массива. Этот метод показан в следующем примере. Для этого необходимо определить следующее перечисление в сборке с именем Enumerations.dll:

C#
[Flags] enum Pets { None=0, Dog=1, Cat=2, Rodent=4, Bird=8,
                    Fish=16, Reptile=32, Other=64 };

Сборка загружается в контексте только для отражения, Type создается экземпляр объекта, представляющего Pets перечисление, извлекается массив FieldInfo объектов , а значения полей отображаются в консоли.

C#
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

Применяется к

.NET 10 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

GetValues<TEnum>()

Исходный код:
Enum.cs
Исходный код:
Enum.cs
Исходный код:
Enum.cs

Возвращает массив значений констант в указанном типе перечисления.

C#
public static TEnum[] GetValues<TEnum>() where TEnum : struct;

Параметры типа

TEnum

Тип перечисления.

Возвращаемое значение

TEnum[]

Массив, который содержит значения констант в TEnum.

Исключения

.NET 8 и более поздних версий: TEnum является логическим типом перечисления.

Применяется к

.NET 10 и другие версии
Продукт Версии
.NET 5, 6, 7, 8, 9, 10