可以从System.ArgumentException派生吗?
如果我有一个方法来检查其参数的有效性,是否可以抛出我自己从System.ArgumentException
派生的自定义exception? 我在问,因为ArgumentException
本身是从System.SystemException
派生的,我看到了一个冲突的指导方针,应用程序是否应该从SystemException
派生。 (尽pipe间接地,从ArgumentException
派生仍然等同于从SystemException
派生。)
我看到很多指导说不从ApplicationException
派生,而是从Exception派生。 我很高兴。 我不确定是否也可以从SystemException派生。
如果我不应该从SystemException
派生,那么我应该从哪个派生我的"invalid argument"
exception类?
关于处理exception的最佳实践的MSDN页面说
如果传递了无效参数,则抛出ArgumentException或从ArgumentException派生的类。
所以我会说这是可以的,甚至build议。
从System.ArgumentException派生的一个好处是, catch(System.ArgumentException)
块将能够处理您的自定义exceptiontypes以及System.ArgumentException
。 这可能是也可能不是你想要的。
如果你想得到你的“无效参数”exception,并且没有超出这个意义的含义,那么ArgumentException
听起来像是一个合理的候选:
当一个方法被调用并且至less有一个传入的参数不符合被调用方法的参数说明时,抛出ArgumentExceptionexception。 –MSDN
.Net中的例外原意是基类库(例如系统程序集)中的exception会抛出从System.Exception
派生的exception,并build议所有自定义exceptioninheritance自System.ApplicationException
以区分BCLexception和应用程序exception但是微软已经回顾了这个想法,现在build议所有的exceptioninheritance自System.Exception
。
我的build议是从框架中最低的Exception
类inheritance,这是合理的。
如果你的exception是指这个参数以外的东西,比如这个types可以把exception添加到exception(就像ArgumentNullException
和ArgumentOutOfRangeException
一样),然后创build一个自定义的exception,如果不是的话就使用ArgumentException
并提供一个有意义的exception信息。
如果您100%重复使用ArgumentException属性并添加一些额外的function,那就没关系了。 但是,当你只是因为它的名字而重用它时,它就不好。