Как преобразовать строку в массив enum (код ключа []) - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь преобразовать строку, содержащую коды клавиш, разделенные запятой ',' (F1, F2, A, B ...).

Но когда я пишу эти значения втекстовый файл, я получаю UnityEngine.KeyCode [] вместо реального значения.

    private static ConfigSimulation UpdateConfigSimulation(string path, ConfigSimulation config)
{
    #region ReadConfig
    Dictionary<string, string> content = new Dictionary<string, string>();
    content = ReadConfigFile(path);
    #endregion
    foreach (KeyValuePair<string, string> cont in content)
    {
        if (config.Keys.ContainsKey(cont.Key))
        {
            KeyCode[] Tab = new KeyCode[cont.Value.Split(',').Length];
            if (!cont.Value.Contains(',') || (cont.Value.Length == 0))
            {
                KeyCode MyStatus = (KeyCode)Enum.Parse(typeof(KeyCode), cont.Value, true);
                Tab[0] = MyStatus;
            }
            else if (cont.Value.Contains(','))
            {
                string[] Splits = cont.Value.Split(',');
                for (int i = 0; i < Splits.Length; i++)
                {
                    KeyCode MyStatus = (KeyCode)Enum.Parse(typeof(KeyCode), Splits[i], true);
                    Tab[i] = MyStatus;
                }
            }
            config.Keys[cont.Key] = Tab;
        }
    }
    return (config);
}

Для написания кода:

        File.WriteAllText(path, string.Empty);
    using (StreamWriter file = new StreamWriter(path))
    {
        file.WriteLine("###keys");
        foreach (var kvp in config.Keys)
        {
            file.WriteLine(kvp.Key + '=' + kvp.Value);
        }
    }

1 Ответ

1 голос
/ 05 июня 2019

config.Keys имеет тип Dictionary<string, KeyCode[]>, поэтому, когда вы делаете

foreach (var kvp in config.Keys)
{
    file.WriteLine(kvp.Key + '=' + kvp.Value);
}

kvp.Value имеет тип KeyCode[], поэтому он косвенно называется ToString() и возвращает "KeyCode[]". Не существует неявного метода, который выводит все значения через запятую.


Преобразование массива в строку через запятую, используя string.Join подобно

foreach (var kvp in config.Keys)
{
    file.WriteLine(kvp.Key + '=' + string.Join(",", kvp.Value));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...