Перечислить индекс по значению - PullRequest
2 голосов
/ 15 сентября 2009
 [FlagsAttribute]
public enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 };

У меня есть перечисление как шоу. Мне нужна возможность получить, скажем, Colors.Blue с индексом 2, индекс начинается с 0. Я хочу получить номер индекса, передаваемый в Colors.Wh независимо? Может кто-нибудь выложить мне некоторые фрагменты ...

Ответы [ 7 ]

11 голосов
/ 15 сентября 2009

Попробуйте это:

int index  = Array.IndexOf(Enum.GetValues(typeof(Colors )), Colors.Green);
3 голосов
/ 15 сентября 2009

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

public int GetIndex(Colors color) {
   int value = (int)colors;
   int index = 0;
   while (value > 0) {
      value >>= 1;
      index++;
   }
   return index;
}

Обратите внимание, что индекс битов обычно равен нулю, но здесь вы получаете индекс на основе одного.

Если вы хотите индекс, основанный на нуле, вы получите индекс два для синего, а не три, как вы указали в вопросе. Просто начните с index = -1;, если вы хотите именно этого.

2 голосов
/ 15 сентября 2009

Не могу понять ваш вопрос, но вы это имеете в виду:

var blue = (Colors)Enum.GetValues(typeof(Colors))[2];
1 голос
/ 15 сентября 2009

Я не знаю, зачем вам это нужно, но один из способов сделать это -

 Colors c = (Colors)Enum.Parse(typeof(Colors), Enum.GetNames(typeof(Colors))[index]);
0 голосов
/ 24 марта 2017

Я использую следующий код, и он работает:

 int index=(int)Enum.Parse(typeof(Colors), "Green");
0 голосов
/ 02 декабря 2015

Я получил это после того, как сделал это так:

return (Status)Enum.GetValues(typeof(Status)).GetValue(this.EvaluationStatusId);
0 голосов
/ 28 мая 2012

Это самое простое решение, которое я нашел. Прекрасно работает с флагами без использования байтов.

Array eVals = Enum.GetValues(typeof(MyEnum));
MyEnum eVal = (MyEnum)eVals.GetValue(iIndex);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...