C#如何捕获字母字符

时间:2017-08-30 13:56:55

标签: c# try-catch

我目前正在研究高度转换计算器,将英尺和英寸转换为厘米,并希望创建一个" 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;

关于我如何挑战这个问题的任何建议?

2 个答案:

答案 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