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

aba*_*hev 0 .net architecture exception

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

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

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

要么

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

Ada*_*eld 5

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