C# 如何创建自己的异常

C# 如何创建自己的异常,c#,exception,try-catch,C#,Exception,Try Catch,我特别为控制台应用程序寻找解决方案,不过也欢迎为表单应用程序提供答案。 你能帮我解决以下问题吗 我的问题: 我想创建自己的异常,当用户键入其中一个时,它将捕获5到9之间的任何数字 注意:我知道我可以通过简单地使用IF-ELSE语句来解决这个问题,但我特别希望它能被捕获为异常 我不明白的是: 例如,一旦用户输入5,我自己创建的异常就会捕捉到它——我不明白的是如何告诉我创建的异常类捕捉什么,寻找什么?我应该在我的异常中键入这些数字,并告诉我的异常类这些数字是异常 如果我不够清楚,请让我知道,我将尝试

我特别为控制台应用程序寻找解决方案,不过也欢迎为表单应用程序提供答案。 你能帮我解决以下问题吗

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

注意:我知道我可以通过简单地使用
IF-ELSE
语句来解决这个问题,但我特别希望它能被捕获为异常

我不明白的是: 例如,一旦用户输入5,我自己创建的异常就会捕捉到它——我不明白的是如何告诉我创建的异常类捕捉什么,寻找什么?我应该在我的异常中键入这些数字,并告诉我的异常类这些数字是异常


如果我不够清楚,请让我知道,我将尝试重新表述自己。

如果我理解你的意思正确,我认为你应该尝试以下方式:

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

如果(yourNumber>=5&&yourNumber如果我理解你的意思是正确的,我想你应该尝试以下方法:

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

如果(yourNumber>=5&&yourNumber您可能会从异常中受益

听起来你在尝试做三件事

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.");
//读取输入
int i=-1;
i=int.TryParse(MyTextField.Text,out i);

如果(i>=5&&i您可能会从异常中受益

听起来你在尝试做三件事

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.");
//读取输入
int i=-1;
i=int.TryParse(MyTextField.Text,out i);

如果(i>=5&&i,下面的代码显示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)
    {
    }
}
类程序
{
静态void Main(字符串[]参数)
{
尝试
{
intx=Convert.ToInt32(Console.ReadLine());

如果(x>=5&&x,下面的代码显示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)
    {
    }
}
类程序
{
静态void Main(字符串[]参数)
{
尝试
{
intx=Convert.ToInt32(Console.ReadLine());

如果(x>=5&&x异常不会发生。当您的代码抛出异常时,例如,如果您尝试除以0,得到一个
dividebyzerotexception
,这意味着某些代码某处必须有一行,如
throw new dividebyzerotexception();
(无可否认,这是对问题的简化)

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

//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.");
假设您并不意味着需要自定义异常(例如,
FiveToNineException
)-您可以使用以下方法:

if (i >= 5 && i <= 9)
{
    throw new Exception("5 to 9 Exception");
}
然后你可以有:

throw new FiveToNineException();
以及:


有关更多信息,请参阅,以获取我的一个问题的答案。

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

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

//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.");
假设您并不意味着需要自定义异常(例如,
FiveToNineException
)-您可以使用以下方法:

if (i >= 5 && i <= 9)
{
    throw new Exception("5 to 9 Exception");
}
然后你可以有:

throw new FiveToNineException();
以及:


有关更多信息,请参阅以获取我的一个问题的答案。

异常不会主动查找违规行为。您可能正在寻找某种形式的验证框架。能否显示一个小样本的代码?我认为您误解了异常的用途。异常应指示出某些错误,这就是它崩溃的原因你的程序!无论发生什么,你都需要
if/else
。是的,你需要验证。异常是不同的。我认为你使用的名称Exception完全无效。异常被抛出并被捕获。它们不捕获任何内容。异常基本上是一个简单的数据持有者对象,详细解释了它被捕获的原因抛出。异常不会主动查找冲突。您可能正在查找某种形式的验证框架。能否显示一小部分代码样本?我认为您误解了异常的用途。异常应该表明出现了问题,这就是它导致程序崩溃的原因!您需要
if/else
无所谓r什么。是的,你需要验证。异常是不同的。我认为你使用的名称异常完全无效。异常被抛出并被捕获。它们什么都没有捕获。异常基本上是一个简单的数据持有者对象,它详细解释了抛出它的原因。这就是我创建CU的目的tom Exception:)为了这个示例,让它命名为“FiveToNineException”,这样我就可以将它与CATCH(FiveToNineException)一起使用。有什么方法可以这样做吗?或者链接到如何做到这一点?Thx是为了关注我的问题。好吧,这有点像是我创建自定义异常的目的:)为了这个示例,让它命名“FiveToNineException”,这样我就可以将它与CATCH(FiveToNineException)一起使用。有什么方法可以做到吗?或者链接到如何做到这一点?谢谢大家关注我的问题。