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

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

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

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

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

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

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


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

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

9   голосов , оценка 3.667 из 5
Похожие ответы