编译失败:抛出异常还是不抛出异常?

时间:2009-03-21 14:34:50

标签: .net exception architecture

我正在为CLR脚本编写.NET On-the-Fly编译器。并且陷入两难境地:在构建失败时抛出异常是否更好?

那么最佳实践观点是什么,哪种方法更合适?

try
{
  compiler.Compile(); // do not throws an exception only if build succeed
}
catch(CompilerException ex)
{
  string err = ex.Message;
}

compiler.Compile(); // throws an exception only in case of crash, etc
if(!compiler.BuildSucceed)
{
  string err = compiler.Output.ToString();
}

1 个答案:

答案 0 :(得分:5)

例外条件应使用例外。我会说失败的构建不是例外,所以你应该让编译器的接口返回一个表示成功或失败的值(例如bool或enum),并提供一个返回列表的接口错误。这可以像返回连接在一起的所有错误的字符串一样简单,或者它可能类似于事先将输出流传递给它,并且它会在遇到它们时将每个错误记录到该流。