Выбрать значение enum методом рефлексии - C#

Узнай цену своей работы

Формулировка задачи:

Привет всем! Стала задача: В структуре layer есть enum Place
Листинг программы
  1. internal enum Place
  2. {
  3. XY = 0,
  4. XZ = 1,
  5. YZ = 2
  6. }
Сейчас я к нему обращаюсь так
Листинг программы
  1. private void mMAP_Click(object sender, EventArgs e)
  2. {
  3. tLayer.PLO = layer.Place.YZ;
  4. p.PlaneVal.ActChoi = true;
  5. }
Значение layer.Place будет меняться в зависимости от выбранной опции в настройках Соответственно придется юзать либо if-else либо switch-case. Можно ли как-то обойтись без этих конструкций? А сделать как-то
Листинг программы
  1. private void mMAP_Click(object sender, EventArgs e)
  2. {
  3. string s = "YZ";
  4. tLayer.PLO = layer.Place.s;
  5. p.PlaneVal.ActChoi = true;
  6. }
Код не рабочий, он отражает лишь основную идею Пробовал так:
Листинг программы
  1. typeof(layer).GetField("Place").SetValue(tLayer.PLO, "XZ");
Выдает
Ссылка на объект не указывает на экземпляр объекта.
При чем не пойму, на кого конкретно он ругается
А, все, решено:
Листинг программы
  1. (layer.Place)Enum.Parse(typeof(layer.Place), "XZ");

Решение задачи: «Выбрать значение enum методом рефлексии»

textual
Листинг программы
  1. IDictionary placesDict = new ListDictionary();
  2. placesDict.Add("XY", Place.XY);
  3. placesDict.Add("XZ", Place.XZ);
  4. placesDict.Add("YZ", Place.YZ);
  5.  
  6. ... где-то в коде
  7. var something = (layer.Place)placesDict["XZ"];

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы