应该允许异常的构造方法引发异常吗?
示例:
public class MyException : Exception
{
public List<string> Errors { get; private set; }
public MyException(List<string> errors)
{
if(errors == null)
{
throw new ArgumentNullException();
}
else if(errors.Count == 0)
{
throw new ArgumentException("At least one error must be present");
}
Errors = errors;
}
}
使用ArgumentNullException
时,构造函数中抛出的那些异常(ArgumentException
和MyException
)会造成伤害吗?
这是此异常的用例:
class Program
{
private static void ErrorHandling()
{
List<string> lst = new List<string>();
// ... here do some checks and insert the errors in the list 'lst'
// This check prevent the ArgumentNullException and
// the ArgumentException to be thrown
if (lst.Count > 0)
{
throw new MyException(lst);
}
}
static void Main(string[] args)
{
try
{
ErrorHandling();
}
catch(MyException e)
{
foreach(string s in e.Errors)
{
Console.WriteLine(s);
}
}
}
}
我谈论的危害是:如果由于某些原因,使用MyException
的程序员不检查输入列表(if (lst.Count > 0)
),可能会导致不必要的后果。 ArgumentNullException
/ ArgumentException
。
我认为这可能会导致错误,导致程序员尝试使用错误的参数抛出MyException
,而抛出ArgumentNullException
/ ArgumentException
。
我应该:
MyException
的构造函数,而将Errors
属性的管理完全由用户负责ArgumentNullException
/ ArgumentException
,因为这会导致错误答案 0 :(得分:-1)
那些异常会在构建MyException时造成危害
我看不到您在构建任何异常,而且您的MyException
类毫无意义。您可以简单地使用另一种private
方法来完成您的工作。那么为什么要为此不必要地构建应用程序异常呢?
public List<string> CheckErrors(List<string> errors)
{
if(errors == null)
{
throw new ArgumentNullException()
}
else if(errors.Count == 0)
{
throw new ArgumentException("At least one error must be present");
}
return errors;
}