C# 将 ReadKey() 转换为 int
C# Conversion of ReadKey() to int
我是 C# 的新手,被告知要创建一个基于文本的口袋妖怪战斗模拟器,所以在下面的代码中,我有一个方法来获取用户输入并决定口袋妖怪获得哪种性质:
public static void NatureSelection(out int statIndex1, out int statIndex2)
{
Console.WriteLine("If you wish to have a neutral nature, Enter 0 in the next line, If not, enter any key to continue");
char holder = Convert.ToChar(Console.ReadKey());
statIndex1 = Convert.ToInt16(holder);
if (statIndex1 == 0)
{
statIndex2 = 0;
}
Console.WriteLine("Please Select A Nature For Your Pokemon By Entering The Number Beside The Stats That You Want To Increase ");
statIndex1 = Convert.ToInt16(Console.ReadKey());
while (!(statIndex1 > 0 && statIndex1 <=5))
{
statIndex1 = Convert.ToInt32(Console.ReadKey());
Console.WriteLine("Invalid Value,Please Try Again");
}
Console.WriteLine("Now Enter The Number Beside The Stats That You Want To Decrease ");
statIndex2 = Convert.ToInt32(Console.ReadKey());
while (!(statIndex2 > 0 && statIndex2 <= 5))
{
statIndex2 = Convert.ToInt16(Console.ReadKey());
Console.WriteLine("Invalid Value,Please Try Again");
}
}
然而,当我尝试将 readkey 转换为 int 时,出现错误:
这一行给出了错误:
char holder = Convert.ToChar(Console.ReadKey());
An unhandled exception of type 'System.InvalidCastException' occurred
in mscorlib.dll
Additional information: Unable to cast object of type
'System.ConsoleKeyInfo' to type 'System.IConvertible'.
谁能解释一下这是什么意思,我该如何解决?
肯定是这一行Convert.ToInt16(Console.ReadKey())
导致异常,因为转换失败,建议你这样使用:
int myNumber = (int)(Console.ReadKey().KeyChar);
因为Console.ReadKey()
returns a ConsoleKeyInfo
所以.KeyChar
会给你对应的字符值,使用隐式转换很容易将其转换为整数。但这也会为字符提供 ascii 值。
您的另一个选择是TryParse
,这样您也可以识别转换结果。那就是代码将是这样的:
int myNumber;
if (!int.TryParse(Console.ReadKey().ToString(), out myNumber))
{
Console.WriteLine("Conversion faild");
}
// myNumber holds the result
我是 C# 的新手,被告知要创建一个基于文本的口袋妖怪战斗模拟器,所以在下面的代码中,我有一个方法来获取用户输入并决定口袋妖怪获得哪种性质:
public static void NatureSelection(out int statIndex1, out int statIndex2)
{
Console.WriteLine("If you wish to have a neutral nature, Enter 0 in the next line, If not, enter any key to continue");
char holder = Convert.ToChar(Console.ReadKey());
statIndex1 = Convert.ToInt16(holder);
if (statIndex1 == 0)
{
statIndex2 = 0;
}
Console.WriteLine("Please Select A Nature For Your Pokemon By Entering The Number Beside The Stats That You Want To Increase ");
statIndex1 = Convert.ToInt16(Console.ReadKey());
while (!(statIndex1 > 0 && statIndex1 <=5))
{
statIndex1 = Convert.ToInt32(Console.ReadKey());
Console.WriteLine("Invalid Value,Please Try Again");
}
Console.WriteLine("Now Enter The Number Beside The Stats That You Want To Decrease ");
statIndex2 = Convert.ToInt32(Console.ReadKey());
while (!(statIndex2 > 0 && statIndex2 <= 5))
{
statIndex2 = Convert.ToInt16(Console.ReadKey());
Console.WriteLine("Invalid Value,Please Try Again");
}
}
然而,当我尝试将 readkey 转换为 int 时,出现错误:
这一行给出了错误:
char holder = Convert.ToChar(Console.ReadKey());
An unhandled exception of type 'System.InvalidCastException' occurred in mscorlib.dll
Additional information: Unable to cast object of type 'System.ConsoleKeyInfo' to type 'System.IConvertible'.
谁能解释一下这是什么意思,我该如何解决?
肯定是这一行Convert.ToInt16(Console.ReadKey())
导致异常,因为转换失败,建议你这样使用:
int myNumber = (int)(Console.ReadKey().KeyChar);
因为Console.ReadKey()
returns a ConsoleKeyInfo
所以.KeyChar
会给你对应的字符值,使用隐式转换很容易将其转换为整数。但这也会为字符提供 ascii 值。
您的另一个选择是TryParse
,这样您也可以识别转换结果。那就是代码将是这样的:
int myNumber;
if (!int.TryParse(Console.ReadKey().ToString(), out myNumber))
{
Console.WriteLine("Conversion faild");
}
// myNumber holds the result