使异常工作



我不知道如何让异常正常工作

程序应该提示要转换的英镑总数和汇率。然后,它应该以类似于下面输出的方式显示所需的follars数量。

这里的第一部分是我的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CurrencyConvertor
{
  class Program
  {
    static void Main(string[] args)
    {
      CurrencyConvertor();
      Console.ReadLine();
    }
    private static void CurrencyConvertor()
    {
      int ivalue;
      float exchange;
      float results;
      bool valid;
      Console.WriteLine(" please enter a whole number of pounds");
      do
      {
        try
        {
           ivalue = int.Parse(Console.ReadLine());
           Console.WriteLine(" pounds entered : " + ivalue);
           Console.WriteLine("please enter the exchange rate");
           exchange = float.Parse(Console.ReadLine());
           Console.WriteLine(" exchange rate is " + exchange);
           results = ivalue * exchange;
           Console.WriteLine(" £ " + ivalue + " is equivlent to" + " $ {0:N}", results);
           valid = true;
        }
        catch
        {
          Console.WriteLine("unable to convert to integer");
          Console.WriteLine(" Try again- ensure you enter a number");
          valid = false;
        }
      } while (valid == false);
      Console.ReadLine();
    }
  }
}

这两个输入都应该经过验证,以确保用户输入适当的数据类型——下面的输出说明了如果用户输入非数字数据时的预期输出。

所以它应该显示

please enter an integer
try again - ensure you enter an integer
12
pounds entered 12
please enter an exchange rate 
asd
unable to convert to a number 
try again - ensure you enter a number
1.56
exchange rate is 1:56
£12.00 is equivalent to $18.72

我似乎无法让它显示汇率的错误消息,即"无法转换为数字"

您的代码中存在一些缺陷:

  • 您应该更喜欢int.TryParse而不是ParseException应该是一种意外的行为,在这种行为中你必须以某种方式做出反应。用户输入并不意外,您知道使用可能会输入您可以/必须验证的无效数据。

  • 当您使用异常时,不应该一次捕获所有异常,而应该捕获某种类型的异常,您知道如何做出反应。int.Parse本身抛出三种异常(请参见http://msdn.microsoft.com/de-de/library/b3h1hf19(v=vs.110).aspx),您可以从系统本身获得其他一些。您的代码应该捕获FormatException,而不是捕获全部。

  • 无论如何,如果你只是想修复你的代码,你可以通过使用两个单独的try .. catch块来解决你的问题,这些块带有单独的错误消息。

异常是用来捕捉异常的——那些你不希望发生但可能会的事情

您应该使用TryParse方法而不是

while(!int.TryParse(Console.ReadLine(), out ivalue)
{
    Console.WriteLine("Thats not a number, try again");
}

最新更新