使例外工作

时间:2014-09-05 09:55:04

标签: c# exception

我不确定如何让例外工作

程序应提示转换的整数磅数和汇率。然后它应该以类似于下面输出的方式显示相当数量的对开。

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

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

我似乎无法显示汇率的错误消息,说“无法转换为数字”

2 个答案:

答案 0 :(得分:1)

有例外可以捕获异常 - 你不希望发生的事情,但可能

您应该使用TryParse方法

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

答案 1 :(得分:1)

您的代码存在一些缺陷:

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

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

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