如何将字符串转换为ConsoleKeyInfo?

时间:2019-01-06 12:15:16

标签: c# console

我需要知道什么是(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 :(得分:0)

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属性的值
  • 一个布尔值,指示是否按下了shift修饰符
  • 一个布尔值,指示是否按下了alt修饰符
  • 一个布尔值,指示是否按下控件修饰符

这5个值可以用字符串中的空格分隔。要对其进行解析,请使用空格将字符串分割,然后将每个值转换为相应的类型,然后将其传递给ConsoleKeyInfo构造函数。