2011-10-04 55 views
1

我想要一个ApplicationException异常,它只会在输入不是数字时显示消息。这是我现在所拥有的:只显示来自ApplicationException的消息

static void getBookInfo(Book book) 
{ 
    bool isNumeric; 
    float number; 
    string numberInput; 

    Console.Write("Enter Book Title: "); 
    book.Title = Console.ReadLine(); 
    Console.Write("Enter Author's First Name: "); 
    book.AuthorFirstName = Console.ReadLine(); 
    Console.Write("Enter Author's Last Name: "); 
    book.AuthorLastName = Console.ReadLine(); 
    Console.Write("Enter Book Price: $"); 
    numberInput = Console.ReadLine(); 

    isNumeric = float.TryParse(numberInput, out number); 

    if (isNumeric) 
     book.Price = number; 
    else 
    { 
     throw new ApplicationException 
     (
      "This is not a number!\n" + 
      "Please try again." 
     ); 
    } 
} 

整个Program.cs后编辑工作。问题在于ApplicationException部分显示了整个异常的打印输出,现在不是这样做,它只显示消息部分。通常这很简单。 :)

using System; 

namespace Lab_6 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Address address = new Address(); 
      address.StreetNumber = "800"; 
      address.StreetName = "East 96th Street"; 
      address.City = "Indianapolis"; 
      address.State = "IN"; 
      address.ZipCode = "46240"; 

      Book book = new Book(); 

      try 
      { 
       getBookInfo(book); 
       book.PublisherAddress = address; 
       book.PublisherName = "Sams Publishing"; 

       Console.WriteLine("----Book----"); 
       book.display(); 
      } 
      catch (NegativeInputException ex) 
      { 
       Console.WriteLine(ex.Message); 
       return; 
      } 
      catch (ApplicationException ex) 
      { 
       Console.WriteLine(ex.Message); // I had to change so I have only this, 
               // instead of whole printout. 
       return; 
      } 
     } 

     static void getBookInfo(Book book) 
     { 
      bool isNumeric; 
      float number; 
      string numberInput; 

      Console.Write("Enter Book Title: "); 
      book.Title = Console.ReadLine(); 
      Console.Write("Enter Author's First Name: ") 
      book.AuthorFirstName = Console.ReadLine(); 
      Console.Write("Enter Author's Last Name: "); 
      book.AuthorLastName = Console.ReadLine(); 
      Console.Write("Enter Book Price: $"); 
      numberInput = Console.ReadLine(); 

      isNumeric = float.TryParse(numberInput, out number); 

      if (isNumeric) 
       book.Price = number; 
      else 
      { 
       throw new ApplicationException 
       (
        "This is not a number!\n" + 
        "Please try again." 
       ) 
      } 
     } 
    } 
} 
+0

对于它什么原因,什么,你可以请修复格式。 –

+1

这让我很头疼,但我已经纠正它。每次我粘贴代码,然后选择,然后按代码格式化按钮,它会进入双倍间距......奇怪。 – HelpNeeder

回答

3

例外不显示任何内容。这取决于捕捉它们的代码。您也可以使用ApplicationException。请使用Exception,或者使用更具体的内容,如FormatException

+0

但是,如何输入非数字时只显示消息描述?此时我正在显示整个例外文本。我的指示是:输入书价时,您的代码应该检查输入的值是否为数字。如果是,您可以将输入的值分配给作为参数传递的Book对象。如果不是,则应该抛出ApplicationException的对象 。 – HelpNeeder

+0

首先,你的指令并没有说只显示消息,他们说抛出一个异常(告诉你的教师看到[ApplicationException](http://msdn.microsoft.com/en-us/library/system .applicationexception.aspx) - 错误的异常,不应该再使用)。第二,如果你想显示消息,那么'Console.WriteLine(“message”);'? –

+0

这可能很简单。本周我们正在处理异常处理,所以我认为这是实践。 – HelpNeeder

3

如果你只是想显示一条消息给用户,不要抛出任何异常,只显示消息。

if (isNumeric) 
{ 
    book.Price = number; 
} 
else 
{ 
    MessageBox.Show("This is not a number!\n" + "Please try again."); 
} 

编辑

如果你真的想抛出一个异常,并显示它的消息。使用Exception.Message来显示。

try 
{ 
    getBookInfo(...) 
} 
catch (ApplicationException exception) 
{ 
    MessageBox.Show(exception.Message); 
} 
+0

不! OP想抛出一个异常。 – adatapost

+0

我可以,但是,我特别要求抛出ApplicationException的对象。家庭作业... – HelpNeeder

+0

@HelpNeeder:你的问题是什么? – CharithJ

2

抛出Exception的行为和捕获异常并向用户显示错误的行为是两个独立的部分。

当输入的值不是浮点数时抛出异常的代码是正确的。

你需要做的就是围绕你的静态getBookInfo方法调用一个尝试{}赶上{}来捕获该异常,并显示消息

try 
{ 
    Book myBookParameter = .....; 
    getBookInfo(myBookParameter); 
} 
catch(ApplicationException x) 
{ 
    MessageBox.Show(x.Message); 
}