我目前正在学习C#,但我遇到了困难,我无法找到解决方案.
我正在尝试创建自己的Exception类.
该异常称为"InvalidNumberException",它检查一个数字是否等于5.我知道它看起来有点愚蠢,但我只需要了解创建自定义异常的想法.
到目前为止,我在MSDN上发现,为了创建Exception,我需要这四个构造函数:
public class InvalidNumberException : System.Exception
{
public InvalidNumbertException() : base() { }
public InvalidNumberException(string message) : base(message) { }
public InvalidNumberException(string message, System.Exception inner) : base(message, inner) { }
// A constructor is needed for serialization when an
// exception propagates from a remoting server to the client.
protected InvalidNumberException(System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context) { }
}
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何在这个类中实现从控制台输入的数字等于5的方法或构造函数,如果不是,则抛出异常.
如果有人帮助我,我会很感激.
Chr*_*nte 27
异常本身不应该进行检查.相反,无论你使用的数字代码都应该这样做.尝试这样的事情:
if (number == 5)
throw new InvalidNumberException();
Run Code Online (Sandbox Code Playgroud)
RPM*_*984 23
你不需要所有那些构造函数.想想你所创建的例外-以确保int是!=到5.
所以,我会有一个像这样的构造函数:
public InvalidNumberException(int value)
: base(String.Format("Some custom error message. Value: {0}", value)) { }
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
if (number == 5)
throw new InvalidNumberException(number);
Run Code Online (Sandbox Code Playgroud)
你不应该把它包装成一个try块.代码的工作是执行上面的代码块来监视异常,例如:
try
{
CallSomeMethodWhichChecksTheNumberAndThrowsIfNecessary();
}
catch (InvalidNumberException inex)
{
// do something, print to console, log, etc
}
Run Code Online (Sandbox Code Playgroud)
我希望这只是靠在因为在Int32.Parse与Int32.TryParse该目的的方法-不需要自定义异常类.
小智 8
接受的答案是错的!
从接受的答案:
public InvalidNumberException(int value)
{
var message = string.Format("Some custom error message. Value: {0}", value);
base(message, this.InnerException)
}
Run Code Online (Sandbox Code Playgroud)
这是一种更好的方法:
public InvalidNumberException(int value) : base(string.Format("Some custom error message. Value: {0}", value)) { }
Run Code Online (Sandbox Code Playgroud)