我专门为控制台应用寻找解决方案,但欢迎使用表单应用的答案。 你能帮我解决以下问题吗?
我的问题: 我想创建自己的Exception,当用户输入其中一个时,它将捕获5到9之间的任何数字。
注意:我知道我可以通过简单地使用IF ELSE
语句来解决这个问题,但我特别希望将其作为异常进行捕获。
我不明白: 例如,一旦用户键入5,我自己创建的异常就会捕获它 - 我不明白的是如何告诉我创建的异常类要捕获什么,要查找什么?我在哪里在我的Exception中输入这些数字,并告诉我的Exception类这些数字是例外吗?
如果我不够清楚,请告诉我,我会尝试改写自己。
答案 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以获取我的问题的答案。