Преобразовать список строк в список enum (One, Two, et c) - PullRequest
1 голос
/ 03 февраля 2020

Я много искал, но нигде не нашел четкого ответа для списка строк -> enum . У меня есть список строк, которые я хочу превратить в enum , из которого я могу выбрать в Unity инспектор.

В частности, я пытаюсь составьте список enum всех текущих настроек кнопок ввода из настроек проекта. У меня есть все имена, просто не знаю, как сделать это enum или похожим. Идеально отображается как переменная KeyCode в инспекторе.

В настоящее время пытается (и не удается) с:

foreach (string s in names)
{
    if (Enum.TryParse(s, true, out list))
        Debug.Log(list);
    else Debug.Log("FAILED");
}

"names" = static List<string> names; "list" = static MyList list; "MyList" = enum MyList { Null }

Возвращает "FAILED" 58 раз только для 29 входной оси.

Я хочу простое решение, поэтому, если это невозможно или относительно просто, я Выработаю что-то еще.

Код для получения списка "имен" строк (Работает правильно):

var inputManager = AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/InputManager.asset")[0];
SerializedObject obj = new SerializedObject(inputManager);
SerializedProperty axisArray = obj.FindProperty("m_Axes");
if (axisArray.arraySize == 0)
    Debug.Log("No Axes");

for (int i = 0; i < axisArray.arraySize; ++i)
{
    var axis = axisArray.GetArrayElementAtIndex(i);
    var name = axis.FindPropertyRelative("m_Name").stringValue;
    names.Add(name);
}

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Обычно вы можете выполнить

foreach (string colorName in Enum.GetNames(typeof(Colors))), который будет повторять имена перечислений.

В приведенном выше коде вы не показали, что это за список, и откуда пришли имена. Однако.

enum Things { Item1 = 0, Item2 = 1 }

Вы можете получить имя из string name = Enum.GetName(typeof(Things), (int)Things.Item2) и вы можете получить значения из имен с помощью int value = (int)Enum.Parse(typeof(Things), nameOfThing)

Таким образом, в зависимости от того, что вы действительно хотите в список и с чего начать, перебрать и выбрать соответствующий

0 голосов
/ 04 февраля 2020

Я закончил тем, что сделал свое собственное решение, поскольку (и, пожалуйста, исправьте меня, если я ошибаюсь), методы TryParse () и Parse (), кажется, нуждаются в enum, чтобы уже содержал записей с таким же name (или index int) как строка для разбора. Это побеждает цель для меня, так как я делаю это, потому что у меня нет там уже есть имена.

Мое решение закончилось тем, что я переключился на наличие единственной строковой переменной ввода вместо перечисления используйте атрибут ValidateInput от Odin Inspector, чтобы проверить ( для орфографических ошибок и ), соответствует ли входная переменная какой-либо из строковых записей в моем динамическом c списке входных имен InputManager (который я обновить вручную с помощью атрибута кнопки Odin Inspector и кода в исходном сообщении).

Это немного менее чисто, чем я хотел, но выполняет свою работу, поэтому я удовлетворен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...