Как преобразовать строку в ConsoleKeyInfo? - PullRequest
0 голосов
/ 06 января 2019

Мне нужно знать, как должна выглядеть строка для исключения (ConsoleKeyInfo) Enum.Parse. Или другой способ преобразования строки в ConsoleKeyInfo.

Я пытался преобразовать ConsoleKeyInfos в строки напрямую, но это просто оставляет мне кучу строк "ConsoleKeyInfo". Преобразование в ConsoleKeyInfo.Key оставляет меня с ключами и также не исключается при разборе.

    for (int i = 0; i < strListTemp.Count; i++)
    {
    keyBinds.Add((ConsoleKeyInfo)Enum.Parse(typeof(ConsoleKeyInfo), strListTemp[i]));
    }

strListTemp - список строк с преобразованными ConsoleKeyInfos. keyBinds - это список ConsoleKeyInfo.

Ошибка:

System.ArgumentException: 'Type provided must be an Enum.
Parameter name: enumType'

Его нужно преобразовать в строку и обратно, потому что мне нужно сохранить ее в файл. Если есть способ сохранить ConsoleKeyInfos непосредственно в файл, пожалуйста, сообщите мне.

Заранее спасибо!

Эммануил

1 Ответ

0 голосов
/ 06 января 2019

ConsoleKeyInfo имеет атрибут Serializable, что означает, что его можно сохранить в файл с помощью BinaryFormatter.

using (FileStream fs = new FileStream("my console key info.dat", FileMode.Create)) {
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Serialize(fs, yourConsoleKeyInfo);
}

Для десериализации просто позвоните formatter.Deserialize


Если вам нужно строковое представление, вам нужно создать строку из 5 вещей:

  • символ, указывающий значение свойства KeyChar
  • число, указывающее значение свойства Key
  • логическое значение, указывающее, нажата ли модификатор сдвига
  • логическое значение, указывающее, нажата ли модификатор alt
  • логическое значение, указывающее, нажата ли модификатор управления

Эти 5 значений могут быть разделены пробелами в строке. Чтобы разобрать его, разбейте строку на пробелы и преобразуйте каждое из значений в соответствующие им типы и передайте их конструктору ConsoleKeyInfo.

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