如何创建自己的例外

时间:2013-07-15 13:23:15

标签: c# exception try-catch

我专门为控制台应用寻找解决方案,但欢迎使用表单应用的答案。 你能帮我解决以下问题吗?

我的问题: 我想创建自己的Exception,当用户输入其中一个时,它将捕获5到9之间的任何数字。

注意:我知道我可以通过简单地使用IF ELSE语句来解决这个问题,但我特别希望将其作为异常进行捕获。

我不明白: 例如,一旦用户键入5,我自己创建的异常就会捕获它 - 我不明白的是如何告诉我创建的异常类要捕获什么,要查找什么?我在哪里在我的Exception中输入这些数字,并告诉我的Exception类这些数字是例外吗?

如果我不够清楚,请告诉我,我会尝试改写自己。

4 个答案:

答案 0 :(得分:2)

您可能会受益于例外tutorial

听起来你正试图做三件事。

1从文本输入字段中读取数字。

2确定这是否是有效数字。

3如果号码无效,则抛出异常。

//Read input
int i = -1;
i = int.TryParse(MyTextField.Text, out i);

if (i >= 5 && i <= 9) 
    throw new ArgumentOutOfRangeException("value", "Value cannot be  between 5 - 9.");

答案 1 :(得分:1)

如果我理解你是对的,我认为你应该尝试类似的事情:

if (yourNumber >= 5 && yourNumber <= 9)
{
    throw new YourException(..);
}

但也请参阅评论。您对异常的理解不正确。

答案 2 :(得分:1)

以下代码显示了CustomException的基本示例

class Program
{
    static void Main(string[] args)
    {
        try
        {
            int x = Convert.ToInt32(Console.ReadLine());

            if (x >= 5 && x <= 9)
            {
                CustomException e = new CustomException("Please Eneter Another Number");
                throw e;
            }
        }

        catch (CustomException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

public class CustomException : System.Exception
{
    public CustomException(string txt)
        : base(txt)
    {
    }
}

答案 3 :(得分:1)

异常不会发生。当您的代码抛出异常时,例如,如果您尝试除以0并得到DivideByZeroException - 这意味着某些代码必须有一行throw new DivideByZeroException();。 (不可否认,这是对此事的简化。)

因此,为了抛出你想要的异常 - 你必须测试输入,如果它不好则抛出异常。

假设您并不意味着您需要自定义异常(例如FiveToNineException) - 您可以使用此功能:

if (i >= 5 && i <= 9)
{
    throw new Exception("5 to 9 Exception");
}

或者:

if (i >= 5 && i <= 9)
{
    Exception e = new Exception("5 to 9 Exception");
    e.Data.Add("The number ", i);
    throw e;
}

编辑

对于一个非常简单的自定义异常:

public class FiveToNineException : System.Exception
{
    public FiveToNineException() : base() { }
}

然后你可以:

throw new FiveToNineException();

try {/*Do something*/ }
catch (FiveToNineException ex) { }

有关详细信息,请参阅this link以获取我的问题的答案。