在异常和返回值之间进行选择

Cap*_*mic 9 c# architecture exception-handling

我创建了一个从文件中解析一些文档的类.

class Parser
{
  public Parse(string fileName)
  {
    ///
  }
}
Run Code Online (Sandbox Code Playgroud)

有时可能会出现解析错误,解析器必须返回某些数据.我为此创建了特殊课程.

class ParsingError
{
 // some data
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能正确处理这些错误.我至少有两个选择:

创建我自己的异常或返回值.

方案一

myParser.Parse(fileName, out error);
Run Code Online (Sandbox Code Playgroud)

方案二

try
{
  myParser.Parse(fileName)
}

catch(MyParsingException ex)
{
  // use ex.Error field
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

如果我没有弄错,那么例外背后的意识形态就是它应该处理一些特殊的东西,这是该方法无意处理的一些情况.

这让我想知道是否例如:

解析器在文件中找到未知字段,或者编码错误

这会被视为特殊情况吗?

sha*_*oth 15

想想解决错误的典型程度.如果它是典型的 - 支持返回值.异常应该用于不正常的事情.


Gre*_*reg 5

.NET land的异常理念与其他平台略有不同.在.NET领域不需要很长时间才能意识到你不再在OZ中,并且经常会抛出异常.

从.NET 4上的MSDN:不返回错误代码.例外是在框架中报告错误的主要方法.

来自.NET 4.5上的MSDN:异常是执行程序遇到的任何错误情况或意外行为.

他们给出的一个例子是客户端无法连接到端点.因此,如果您认为有时网站不可用于网络或其他原因,这不符合传统的"例外"定义,您可以了解他们的创作者如何打算使用例外.