我目前正在研究高度转换计算器,将英尺和英寸转换为厘米,并希望创建一个" catch"当用户输入字母字符而不是数字字符时,这将产生错误消息,甚至可能会解决的问题是用户输入无效(例如输入5' 111'而不是5' 11&#39 )。
目前的捕获并不起作用:
Console.Clear();
Console.WriteLine("Convert your height into Centimeters!");
Console.WriteLine("Please give your height in the form of Feet and Inches, for example: 5'10\"");
//user enters 5'10"
heightString = Console.ReadLine();
//heightString = "5'10""
heightString = heightString.Remove(heightString.Length - 1);
//heightString = "5'10"
posOfInch = heightString.IndexOf("'");
//posOfInch = 1
try
{
}
catch ()
{
throw new ("Generic Error Message");
}
//此catch在应用程序中无效
feet = Convert.ToInt16(heightString.Remove(posOfInch));
//feet = 5
inches = Convert.ToInt16(heightString.Substring(posOfInch + 1));
//inches = 10
inches = (feet * 12) + inches;
centimetres = (inches * 2.54);
Console.WriteLine("Your height is " + centimetres + "cm");
//Console.WriteLine("Please give your height measurement in inches : ");
//calculating = int.Parse(Console.ReadLine());
//inches(calculating);
Console.ReadKey();
return true;
关于我如何挑战这个问题的任何建议?
答案 0 :(得分:4)
无需捕获任何例外情况,请使用TryParse
:
string heightString = "5'10";
short feet, inches;
bool validFormat = false;
int index = heightString.IndexOf("'", StringComparison.Ordinal);
if (index >= 0)
validFormat = short.TryParse(heightString.Remove(index), out feet)
&& short.TryParse(heightString.Substring(index + 1), out inches);
顺便说一句,既然你没有在任何地方投射,那么抓住InvalidCastException
毫无意义。
答案 1 :(得分:0)
因为您还需要进行输入验证(而不仅仅是转换),我建议使用正则表达式。例如:
\d+'\d{2}'
只接受带有1位或更多位数的输入,然后是引号,接着是其他2位数字和最终引号(只是一个例子,您可能会找到更具选择性的数字)。
此外,如果要将值提取到转换它们并将它们存储为整数,则可以使用分组并提取值,只需在要捕获的输入周围加上括号即可。
供参考,请查看:https://www.codeproject.com/articles/93804/using-regular-expressions-in-c-net