Показать только сообщение от ApplicationException - PullRequest
1 голос
/ 04 октября 2011

Я пытаюсь создать исключение 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."
                )   
            }
        }
    }
}

Ответы [ 3 ]

3 голосов
/ 04 октября 2011

Если вы просто хотите показать сообщение пользователю, не бросайте никаких исключений, просто покажите сообщение.

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

EDIT

Если вы действительно хотите выбросить исключение и показать его сообщение. Используйте Exception.Message для отображения.

try
{
    getBookInfo(...)
}
catch (ApplicationException exception)
{
    MessageBox.Show(exception.Message);
}
3 голосов
/ 04 октября 2011

Исключения не показывают ничего. Это зависит от кода, который их ловит.

Кроме того, вы не должны использовать ApplicationException. Либо используйте Exception, либо используйте что-то более конкретное, например FormatException.

2 голосов
/ 04 октября 2011

Активация исключения и активация исключения и отображение ошибки пользователю представляют собой две отдельные части.

Ваш код для генерации исключения, когда введенное значение не является плавающей точкой, является правильным.

Что вам нужно сделать, это окружить ваш вызов статического метода getBookInfo попыткой {} catch {}, которая перехватывает исключение и отображает сообщение

try
{
     Book myBookParameter = .....;
     getBookInfo(myBookParameter);
}
catch(ApplicationException x)
{
     MessageBox.Show(x.Message);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...